3

事前共有キーを使用して、リモート サーバーへの TLS 接続を確立する必要があります。現在、Bouncycastle の PSKTlsClient を使用しています。私の初期化コードは次のようになります。

 socket_ = new Socket(address,port);            
 tlsHandler_ = new TlsProtocolHandler(socket_.getInputStream(),socket_.getOutputStream());           
 pskTlsClient_ = new PSKTlsClient(tlsPskInfo_);            
 tlsHandler_.connect(pskTlsClient_);

ただし、このスタックトレースを取得しています:

java.io.IOException: Internal TLS error, this could be an attack
at org.bouncycastle.crypto.tls.TlsProtocolHandler.failWithError(Unknown Source)
at org.bouncycastle.crypto.tls.TlsProtocolHandler.safeReadData(Unknown Source)
at org.bouncycastle.crypto.tls.TlsProtocolHandler.connect(Unknown Source)
at common.network.Transport.PskTlsClientSocket.connect(PskTlsClientSocket.java:61)

PSK が送信されるメッセージで TLS 証明書も取得しましたが、この接続を確立する方法に行き詰まっています。続行する方法について何か提案はありますか?

4

1 に答える 1

7

解決しました。問題は、java bouncycastleライブラリで、プロセスサーバー証明書メソッドが実装されておらず、常に内部エラーをスローすることでした。だから私はこれを実装する必要があり、その後はすべてうまくいきました。

編集:TlsPSKKeyExchange.javaで、次のメソッドを次のように変更します。

public void processServerCertificate(Certificate serverCertificate) throws IOException
{
    SubjectPublicKeyInfo subPubKeyInfo = serverCertificate.certs[0].getTBSCertificate().getSubjectPublicKeyInfo();
    RSAPublicKey pubKey = RSAPublicKey.getInstance(subPubKeyInfo.getPublicKey());
    rsaServerPublicKey = new RSAKeyParameters(false,pubKey.getModulus(),pubKey.getPublicExponent());
}

最初の証明書の最初の公開鍵は、RSA暗号化に使用されます。

于 2012-07-01T21:30:55.023 に答える