【问题标题】:Rest client communicating with server over https休息客户端通过 https 与服务器通信
【发布时间】:2014-02-22 13:49:07
【问题描述】:

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

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

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

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

  4. 证书与 JVM(keytool 事物、keystore 等)之间的关系是什么?

如您所见,我的问题更多是关于基本概念的。

谢谢

【问题讨论】:

    标签: java security rest ssl-certificate sslhandshakeexception


    【解决方案1】:

    简单地说,

    1. 您可以创建自己的自签名证书。这不会保护您的应用免受各种攻击,但您的通信将被加密。如果您在某个 Intranet 中运行它,我认为这是一个合理的解决方案。
    2. 见下文
    3. 见 #1
    4. 见 #2

    要在您的服务器中生成证书,您可以执行类似的操作

    /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");
    

    【讨论】:

    • 感谢您抽出宝贵时间回答,Leo。
    • 我自己花了很多时间来弄清楚这个路线图,你没有理由浪费同样的时间;-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-28
    • 2015-04-30
    • 1970-01-01
    • 2013-08-08
    • 1970-01-01
    • 1970-01-01
    • 2017-07-16
    相关资源
    最近更新 更多