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 © 2025
京ICP备05028076号