2010年11月26日 星期五 15:41
大家好~潜水3年多~冒个泡。 有一个java + SSL 的技术问题想请教一下,我用google找了好久,没有得到答案,下面的问题,能够说明这个。 我使用Java编写了一个服务器,其中SSL 的socket生成使用keytool生成: echo ------------生成密钥对------------ keytool -genkey -alias serverkey -keystore serverkey.key 然后用java 代码读进来: String key = "serverkey.key"; char[] keyStorePass = _userPassword.toCharArray(); char[] keyPassword = _userPassword.toCharArray(); KeyStore ks = KeyStore.getInstance(KeyStore.getDefaultType()); ks.load(new FileInputStream(key),keyStorePass); KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509"); kmf.init(ks,keyPassword); SSLContext sslContext = SSLContext.getInstance("SSLv3"); sslContext.init(kmf.getKeyManagers(),null,null); SSLServerSocketFactory factory=sslContext.getServerSocketFactory(); SSLServerSocket t_socket = (SSLServerSocket)factory.createServerSocket(12345); //t_socket.setNeedClientAuth(true); 这个时候客户端进行连接的话,就会安装证书(SSL握手协议)。然后就开始通讯。中间倒是没有什么出错的问题。 想问:这样是否就安全了?我google了一下,说这个只是单向认证,是否不安全? 另: 服务器、客户端双向认证又是怎么回事?这个有点复杂,我自己迷糊了很久。 我将上面代码最后一行 //t_socket.setNeedClientAuth(true); 的注释去掉,表示说服务器需要客户端验证。 然后用下面keytool 语句生成客户端cer,并导入到客户端中。 生成证书过程没有报任何错误,全部正确。错误情况都google 修改过了。 echo ------------生成密钥对------------ keytool -keystore serverkey.key -genkeypair -alias serverkey echo ------------生成证书签名请求------------ keytool -keystore serverkey.key -certreq -alias serverkeyKey -file serverkey.csr echo ------------生成CA的自签名证书------------ openssl req -new -x509 -keyout CA.key -out CA.crt -config openssl.conf echo ------------用CA私钥进行签名------------- openssl ca -in serverkey.csr -out client.cer -cert CA.crt -keyfile CA.key -notext -config openssl.conf echo ------------导入信任的CA根证书到keystore------------- keytool -import -v -trustcacerts -alias CA -file CA.crt -keystore serverkey.key echo ------------把生成的证书导入到keystore------------ keytool -keystore serverkey.key -importcert -alias serverkeyKey -file client.cer 但是服务器在SSL握手的时候到 CC (client certificate)阶段,服务器报出了 null cert chain 的java 异常,这个是怎么回事呢? 关于这个错误我也google 很久,一直没有找到答案。 多谢先!
2010年11月26日 星期五 17:50
2010/11/26 Ting YuCheng <yuchting在gmail.com>: > 这个时候客户端进行连接的话,就会安装证书(SSL握手协议)。然后就开始通讯。中间倒是没有什么出错的问题。 > > 想问:这样是否就安全了?我google了一下,说这个只是单向认证,是否不安全? 认证是单向的,事关身份确认问题 但是传输是双向加密的 双向认证是客户端也有一个证书,和服务器同一个CA签发的,表明身份 > > 另: > 服务器、客户端双向认证又是怎么回事?这个有点复杂,我自己迷糊了很久。 -- Ren Xiaolei
2010年11月26日 星期五 20:24
在 2010年11月26日 下午5:50,任晓磊 <julyclyde在gmail.com> 写道: > 2010/11/26 Ting YuCheng <yuchting在gmail.com>: >> 这个时候客户端进行连接的话,就会安装证书(SSL握手协议)。然后就开始通讯。中间倒是没有什么出错的问题。 >> >> 想问:这样是否就安全了?我google了一下,说这个只是单向认证,是否不安全? > 认证是单向的,事关身份确认问题 > 但是传输是双向加密的 > > 双向认证是客户端也有一个证书,和服务器同一个CA签发的,表明身份 多谢这位仁兄! >> 另: >> 服务器、客户端双向认证又是怎么回事?这个有点复杂,我自己迷糊了很久。 > > > -- > Ren Xiaolei > _______________________________________________ > zeuux-universe mailing list > zeuux-universe在zeuux.org > http://www.zeuux.org/mailman/listinfo/zeuux-universe > > ZEUUX Project - Free Software, Free Society! > http://www.zeuux.org
Zeuux © 2024
京ICP备05028076号