哲思官方群认证群组  - 讨论区

标题:[zeuux-universe] 关于java SSL 的问题。

2010年11月26日 星期五 15:41

Ting YuCheng yuchting在gmail.com
星期五 十一月 26 15:41:17 CST 2010

大家好~潜水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 很久,一直没有找到答案。

多谢先!

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-universe]

2010年11月26日 星期五 17:50

任晓磊 julyclyde在gmail.com
星期五 十一月 26 17:50:53 CST 2010

2010/11/26 Ting YuCheng <yuchting在gmail.com>:
> 这个时候客户端进行连接的话,就会安装证书(SSL握手协议)。然后就开始通讯。中间倒是没有什么出错的问题。
>
> 想问:这样是否就安全了?我google了一下,说这个只是单向认证,是否不安全?
认证是单向的,事关身份确认问题
但是传输是双向加密的

双向认证是客户端也有一个证书,和服务器同一个CA签发的,表明身份
>
> 另:
> 服务器、客户端双向认证又是怎么回事?这个有点复杂,我自己迷糊了很久。


-- 
Ren Xiaolei

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-universe]

2010年11月26日 星期五 20:24

Ting YuCheng yuchting在gmail.com
星期五 十一月 26 20:24:19 CST 2010

在 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

[导入自Mailman归档:http://www.zeuux.org/pipermail/zeuux-universe]

如下红色区域有误,请重新填写。

    你的回复:

    请 登录 后回复。还没有在Zeuux哲思注册吗?现在 注册 !

    Zeuux © 2024

    京ICP备05028076号