为什么我需要CA证书文件通过Java与服务器建立SSL连接?

时间:2014-09-09 12:45:14

标签: java ssl ssl-certificate pem

我有一个PEM格式的自签名客户端证书,通过SSL Socket与服务器建立连接。该证书如下所示:

client.pem

-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
-----BEGIN ENCRYPTED PRIVATE KEY-----
...
-----END ENCRYPTED PRIVATE KEY-----

在Python中,我的客户端代码只需要这个PEM文件,效果很好:

context = ssl.SSLContext(ssl.PROTOCOL_SSLv3)
context.load_cert_chain('client.pem', password='password')
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock = context.wrap_socket(sock)
sock.connect(('localhost', 2007))
...

我必须将此代码翻译为Java。我使用Not-Yet-Commons-SSL库编写了工作代码,但事实证明我还需要CA.crt。没有它,这段代码根本不起作用。

SSLClient client = new SSLClient();
client.setEnabledProtocols(new String[] { "SSLv3" });
client.addTrustMaterial( TrustMaterial.DEFAULT );
client.addTrustMaterial( new TrustMaterial( "CA.crt" ) );
client.setKeyMaterial( new KeyMaterial( "client.pem", "password".toCharArray() ) );
SSLSocket sslsocket = (SSLSocket) client.createSocket("localhost", 2007);
...

为什么Java需要这个CA证书,而Python不需要它?我怎样才能在Java中摆脱这个?

0 个答案:

没有答案