我有这个:
SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket("www.verisign.com", 443);
第二行出现“连接被拒绝”错误。
现在,在我甚至可以执行上述操作之前,是否必须在我的信任库中安装verisign的证书?我的印象是我可以连接到SSL服务器并执行getPeerCertificates()来获取证书。这不是我们的浏览器吗?否则他们如何知道使用哪个签名机构?
(显然我正在使用Verisign作为一个例子。我的真实网址太难以在这里使用了......)
答案 0 :(得分:1)
您是否检查过远程服务是否已启动并正在运行,您是否可以连接到该服务?也许“拒绝连接”错误实际上是拒绝连接。 : - )
答案 1 :(得分:1)
通常,您无需在计算机上明确安装服务器证书。 PKI的工作方式是您的系统应该能够在没有任何先验知识的情况下验证服务器的证书。但是,只有当服务器的证书依赖于“已知CA”(即证书颁发机构,其根或其他证书已在客户端系统上列出)时,这才会起作用。如果不是这种情况(例如,您在服务器上有自签名证书或其他自定义证书),则在提及的类可以正确验证服务器证书之前,您确实需要在客户端系统上安装证书。
答案 2 :(得分:1)
拒绝连接意味着没有人在目标主机上侦听:端口,或防火墙阻碍了。这在逻辑上和时间上都在SSL之前。