在从java进行连接时,是否需要在VM TrustStore中添加经过验证的CA?

时间:2012-03-14 11:16:17

标签: java ssl https

我正在从一个应用程序sayApp1拨打电话到另一个应用程序(比如App2),这个应用程序由Verisign或Thawte等经过验证的CA授权

String urlStr="https://myApp2/welcome"
HttpsURLConnection conn1 = (HttpsURLConnection) url.openConnection();
conn1.getInputStream()

我是否需要在某处导入App2颁发的证书 app1的VM信任库?当它们位于不同的tomcat服务器上时(不同的vm)就是这种情况。

如果它们在同一个tomcat服务器上(我的意思是相同的vm),那么同样的情况呢?

我知道在浏览器的情况下,不需要导入CA签名的证书,如verisign,thawte等,但是从java进行连接时呢?

修改: -

正如您所说,无论安装哪个服务器,这都是一样的

这意味着webserver会检查Java 1.6.0_30附带的cacerts文件。所以,如果客户jvm有这些证书,我们就不必做任何事情。

只有当我们从java代码建立url连接时,才会执行此cacerts文件检查。如果是浏览器,它只会检查浏览器truststore.RIGHT?

要将我的网站移至https i,请按照以下步骤

进行操作

C:\ Program Files \ Java \ jdk1.6.0_23> keytool -genkey -alias tomcat -keyalg生成.keystore文件的RSA 最后我在server.xml中进行了更改,它运行了keystoreFile =“c:/。keystore”keystorePass =“changeit”

在网上浏览了太多材料后,我对我刚刚采用的方法感到困惑(我创建了自己的CA或者我刚刚创建了自签名证书吗? 出席客户端)?

2 个答案:

答案 0 :(得分:2)

这取决于。 Java 1.6.0_30附带的cacerts文件有76个条目。如果其他应用程序使用的证书由其中一个供应商使用其中一个证书进行验证,则无需导入。如果使用的协议是HTTPS,则无论安装它们的服务器如何,这都是相同的。有时,供应商拥有需要更新cacerts的新证书。这通常由JVM升级修复。如果用于验证其他应用程序的证书的公钥不在cacerts中,则需要导入该证书以建立信任。

答案 1 :(得分:1)

你的问题真的令人困惑(这是我能说的最少) 您开始说您需要与部署由受信任的CA(如Verisign)签署的证书的应用程序进行通信,并最终询问您在Tomcat中使用的keytool生成的证书类型!

无论如何:

  

我是否需要在VM中的某个位置导入App2颁发的证书   app1的信任库?当他们在不同的tomcat上时就是这种情况   服务器(所以不同的vm)。如果他们在同一个场景怎么样?   同一个tomcat服务器(我的意思是相同的vm)?

这没关系。如果您没有为客户端应用程序定义特定的信任库,那么将使用java的默认值。

如果app2发送由Verisign等受信任发行人签署的证书,那么您无需做任何事情(正如@laz所指出的那样)。由于Verisign的证书应该已经存在于您的Java安装cacerts

  

在通过网络上的太多材料后,我有点困惑   我刚刚遵循哪种方法(我创建了自己的CA还是我   创建自签名证书,需要出现在客户端   方)?

您创建了自签名证书(当然还有私钥)。您需要在客户端的信任库中导入它,当然还要将该密钥库用作服务器的密钥库。