我已經創建了與我的服務器的ssl套接字連接。服務器向我發送RC4密鑰,並使用密鑰創建密碼並將其綁定到現有套接字的輸入和輸出流。我正在於試圖從輸入流中讀取以下錯誤:使用密碼時SSL庫失敗
javax.net.ssl.SSLProtocolException:讀取錯誤:SSL = 0x32fbf8:失敗的SSL庫,通常一個協議錯誤
是否有可能解密工作不正常或RC4密鑰密碼不正確。這種錯誤的原因是什麼?我在android 2.3.3上的應用程序中執行此操作。
多一個查詢,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);
爲什麼服務器,如果您已經使用SSL/TLS發送給您的RC4密鑰? – Bruno 2012-07-19 09:57:38
我正在嘗試按照我爲Windows客戶端所做的相同方式執行此操作。協議爲:1.創建客戶端套接字並建立連接,接收rc4密鑰並使用rc4密鑰來解密進一步的通信。所以我決定用接收到的密鑰創建一個密碼並綁定使用密碼輸入流。我錯了嗎? – grv 2012-07-19 10:02:40
爲什麼要通過SSL/TLS進行兩次加密,並且使用您自己的額外密鑰(無論您是在Windows,Java還是任何其他語言/平臺),您似乎都會通過SSL/TLS通道清楚地傳遞該密鑰?如果你只在現有客戶端上進行一次加密(沒有底層SSL/TLS),那麼通過在通信開始時直接傳遞密鑰更加糟糕。 – Bruno 2012-07-19 10:05:26