2014-01-30 110 views
1

我有一个服务器中的REST客户端将调用另一台服务器中的端点。我明白如果我没有导入证书,由于SSL握手问题,呼叫将失败。我也明白,证书应该从我的服务器导出,然后导入客户端机器。到现在为止还挺好。Rest客户端通过https与服务器通信

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

  2. 这将是为了生成证书(如果是这种情况),并导出证书所需的步骤?

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

  4. 什么证书和JVM(密钥工具的东西,密钥库等)之间的关系?

正如你看到的,我的问题更多的是关于基本概念。

谢谢

回答

1

简而言之,

  1. 您可以创建自己的自签名证书。这不会保护您的应用程序免受各种攻击,但您的通信将被加密。如果你在一些内联网上运行它,我认为这是一个合理的解决方案。
  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"); 
+0

感谢您抽出宝贵时间来回答,狮子座。 – felixthecar

+0

我花了很多时间自己弄清楚这个路线图,没有理由浪费同一时间;-) – Leo