2013-02-22 122 views
0

我有一台服务器使用自签名证书来为我的测试客户提供https连接。交换可信任证书的自签名证书?

我的客户端应用程序是用Java编写的,我是有它接受自签名的证书,像这样:

import org.apache.http.conn.ssl.SSLSocketFactory; 
import org.apache.http.impl.client.DefaultHttpClient; 

SSLSocketFactory factory = new SSLSocketFactory(myTrustedStore); 

DefaultHttpClient client = new DefaultHttpClient(); 
client.getConnectionManager().getSchemeRegistry() 
    .register(new Scheme("https", factory, 456)); 

现在,我拥有一个值得信赖的第三方供应商适当的SSL证书。

如果我换证书,将连接上述失败?因为我使用上面的SSLSocketFactory显式初始化,客户端是否会拒绝服务器证书(这将是一个真正的信任证书?)。

只是想知道如果我必须要改变上面的代码,并有我的测试更新自己的客户端应用程序,或者将连接只是透明地工作他们无需更新?

感谢

-----跟进------

我受够了 '真正的' 证书尝试。我不得不使用自签名证书的代码不起作用。所以在他们使用真正的证书之前,我必须在客户端放弃上面的代码。

回答

0

如果客户接受了自签名的证书,会出现使用正确validable信任的证书没有问题。

如果有问题,你仍然可以手动导入新的证书到您的trustedStore。你的代码不应该受到影响。

+0

喜耶同一个问题 - 这样的客户端代码并不需要进行修改,然后?它会接受新的可信证书,即使我正在使用明确的自签证书初始化连接。 – user1219278 2013-02-22 15:30:09

+0

**“您的代码不应受到影响。”** - 不,您的代码正常。如果失败,您可能需要导入新的证书,但是 - 因为您需要使用此代码进行升级 - 您不应该更改它。 – gaborsch 2013-02-22 15:35:46

+0

好的,谢谢我会给它一个镜头并报告回来。 – user291701 2013-02-22 16:27:20

0

我相信,现在你有一个适当的证书,就可以免去很多你的代码。实际上,DefaultHttpClient现在应该可以工作。

import org.apache.http.impl.client.DefaultHttpClient; 

DefaultHttpClient client = new DefaultHttpClient(); 

您不再需要可信的密钥存储,因为第三方将是您值得信赖的密钥存储现在。 DefaultHttpClient应该自动执行此操作。

+0

当然,我的问题是针对测试人员的 - 考虑到它仍在使用自签名证书进行初始化,发布的原始代码是否会接受可信证书而不作任何修改? – user1219278 2013-02-22 15:27:28

+0

啊我看过了,那我不太确定。您的证书将不在myTrustedStore中。如果它不在受信任的商店中,它可能会默认为外部商店,但我不确定。 正如@GaborSch在下面所说,如果出现问题,请将其添加到您的可信密钥库中进行临时修复。 – mjshaw 2013-02-22 15:29:35

+0

你是对的,但可能在测试/阶段/ UAT实例,他们仍然需要旧的代码... – gaborsch 2013-02-22 15:30:34