我在一台服务器上安装了这个REST客户端,它将调用另一台服务器中的端点。我知道如果我没有导入证书,由于SSL握手问题,呼叫将失败。我也理解证书应该从我的服务器导出,然后在客户端机器中导入。到目前为止一切都很好。
问题是,我应该从服务器导出哪些证书?是否有任何具有特定名称的公共证书?我应该在服务器端创建自签名证书,导出它然后在客户端导入它吗?
生成证书需要采取哪些步骤(如果是这种情况)并导出证书?
对于真实世界的应用程序(在这种情况下,一个服务器与另一个服务器交谈)这个(或这些)证书应该是自签名的,公开的吗?
如您所见,我的问题更多是关于基本概念。
谢谢
答案 0 :(得分:1)
简言之,
要在服务器中生成证书,您可以执行类似
的操作/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");