サーバーとのSSLソケット接続を作成しました。サーバーからRC4キーが送信され、そのキーを使用して暗号を作成し、既存のソケットの入力ストリームと出力ストリームにバインドします。入力ストリームから読み取ろうとすると、次のエラーが発生します。
javax.net.ssl.SSLProtocolException:読み取りエラー:ssl = 0x32fbf8:SSLライブラリの障害、通常はプロトコルエラー
復号化が正しく機能していないか、RC4キー暗号が正しくない可能性があります。そのようなエラーの理由は何ですか。私はアンドロイド2.3.3のアプリでそれをやっています。
もう1つのクエリ、android 2.3.3はsslv23(openssl)をサポートしていますか。もしそうなら、どのように同じものをインスタンス化できますか?(Windowsクライアントでは、rc4キーでセッションコンテキストを設定し、それは完全に正常に機能します)
私はJavaとAndroidを初めて使用し、VC++のバックグラウンドを持っています。専門家やプログラマーは私の質問について教えてください。私のコードは次のとおりです。
sslContext = SSLContext.getInstance("TLS");
/* some code to initialize ssl context */
SSLSocketFactory sslSocketfactory = sslContext.getSocketFactory();
sock = (SSLSocket) sslSocketfactory.createSocket(host,port1);
sock.setSoTimeout(12000);
is = new DataInputStream(new BufferedInputStream(sock.getInputStream(),
16384));
os = sock.getOutputStream();
/* some more code using above mentioned is and os to recieve rc4 key and
write it into a byte array */
SecretKey key2 = new SecretKeySpec(reverserRc4InBytes, 0, reverserRc4InBytes.length, "RC4");
Cipher cipherOS = Cipher.getInstance("RC4");
cipherOS.init(Cipher.ENCRYPT_MODE, key2);
Cipher cipherIS = Cipher.getInstance("RC4");
cipherIS.init(Cipher.DECRYPT_MODE, key2);
cos = new CipherOutputStream(os,cipherOS);
cis = new CipherInputStream(is,cipherIS);