【问题标题】:SSL Sockets in JavaJava 中的 SSL 套接字
【发布时间】:2011-11-27 09:23:34
【问题描述】:

我想使用 SSL 保护我的应用程序中的通信。我正在使用 org.apache.commons.ssl 和 OpenSSL。我已经像这样创建了密钥和 crt(现在是自签名的):

openssl req -new -x509 -nodes -out szrr.crt -keyout szrr.key
openssl rsa -des3 -in szrr.key -out szrr.key.new
del szrr.key
move szrr.key.new szrr.key

所以我现在有我用这种方式使用的密钥和证书:

KeyMaterial km = new KeyMaterial(certChain, key, password);
SSLServer sslServer = new SSLServer();
sslServer.setKeyMaterial(km);
sslServer.addTrustMaterial(TrustMaterial.TRUST_ALL);
sslServerSocket = (SSLServerSocket) sslServer
                    .createServerSocket(serverPort);

certChain,key 是 crt 和 key 的路径,password 就是密码 :)

现在我还需要做什么才能以类似的方式创建 SSLClient?

【问题讨论】:

    标签: java sockets ssl openssl


    【解决方案1】:

    查看以下示例:

    SSLClient client = new SSLClient();
    char[] pwd = "secret".toCharArray();
    
    client.addTrustMaterial( TrustMaterial.DEFAULT );
    client.addTrustMaterial( new TrustMaterial( "/path/to/self-signed.pem" ) );
    client.addTrustMaterial( new KeyMaterial( "/path/to/keystore.jks", pwd ) );
    
    client.setCheckHostname( true ); // default is "true" 
    client.setCheckExpiry( true );   // default is "true" 
    client.setCheckCRL( true );      // default is "true" 
    
    // load a client certificate (max: 1 per SSLClient instance).
    client.setKeyMaterial( new KeyMaterial( "/path/to/client.pfx", "secret".toCharArray() ) );
    SSLSocket s = (SSLSocket) client.createSocket( "www.mysite.com", 443 );
    

    【讨论】:

    • 老实说,我看到了那个例子,但是我不确定这些证书是怎么回事。目前我有一个自签名的 crt 和密钥。我知道我可以生成 pem、jks 和其他我想要的东西,但没有更简单的方法吗?
    • 如果您的服务器未对客户端进行身份验证,您在客户端上需要的只是信任库。如果是这样,那么您的客户还需要自己的证书。但是,对于一种方式验证,您只需要信任存储就可以了。只有一个 client.addTrustMaterial(new TrustMaterial("path to truststore", pwd));
    猜你喜欢
    • 2015-11-12
    • 2014-05-09
    • 2014-08-17
    • 2015-05-21
    • 2015-11-29
    • 2011-11-28
    • 2017-06-18
    • 1970-01-01
    • 2014-01-26
    相关资源
    最近更新 更多