休息客户端通过https与服务器通信

时间:2014-01-30 10:10:54

标签: java security rest ssl-certificate sslhandshakeexception

我在一台服务器上安装了这个REST客户端,它将调用另一台服务器中的端点。我知道如果我没有导入证书,由于SSL握手问题,呼叫将失败。我也理解证书应该从我的服务器导出,然后在客户端机器中导入。到目前为止一切都很好。

  1. 问题是,我应该从服务器导出哪些证书?是否有任何具有特定名称的公共证书?我应该在服务器端创建自签名证书,导出它然后在客户端导入它吗?

  2. 生成证书需要采取哪些步骤(如果是这种情况)并导出证书?

  3. 对于真实世界的应用程序(在这种情况下,一个服务器与另一个服务器交谈)这个(或这些)证书应该是自签名的,公开的吗?

  4. 证书与JVM(keytool事件,密钥库等)之间的关系是什么?
  5. 如您所见,我的问题更多是关于基本概念。

    谢谢

1 个答案:

答案 0 :(得分:1)

简言之,

  1. 您可以创建自己的自签名证书。这不会保护您的应用免受各种攻击,但您的通信将被加密。如果你在某个内部网上运行它,我认为这是一个合理的解决方案。
  2. 见下文
  3. 见#1
  4. 见#2
  5. 要在服务器中生成证书,您可以执行类似

    的操作
    /opt/jdk1.7.0_40/bin/keytool -genkey -alias tomcat -keypass mypassword -keystore keystore.key -storepass mypassword -keyalg RSA
    

    然后您可能需要添加一些步骤来配置您的网络服务器。您尚未指定任何内容,但如果您使用的是tomcat,则需要将类似内容添加到server.xml

        <Connector 
            port="8443" 
            SSLEnabled="true"
            maxThreads="150"  
            scheme="https" 
            secure="true"
            clientAuth="false" 
            sslProtocol="TLS"
            keystoreFile="/path.to.your.keystore/keystore.key"
            keystorePass="mypassword" />    
    

    要在客户端导入证书,可以使用firefox打开登录页面,右键单击页面并打开“查看页面信息”,然后转到“安全”选项卡,然后单击“查看证书” “,点击”详细信息“然后”导出“。

    默认为x.509 PEM,没关系。假设您已将文件保存为“TomcatUser.pem.x509”,您必须以java可以理解的格式将证书存储在密钥库中,就像这样

     /opt/jdk1.7.0_40/bin/keytool -import -file TomcatUser.pem.x509 -keystore ~yourUser/MyLocalKeypass -storepass xyz
    

    最后,您的客户需要这样的

    System.setProperty("javax.net.ssl.trustStore","~yourUser/MyLocalKeypass");
    System.setProperty("javax.net.ssl.trustStorePassword","xyz");