我已经创建了与我的服务器的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