Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ssl/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java SSL客户端-何时需要证书?_Java_Ssl_Connection - Fatal编程技术网

Java SSL客户端-何时需要证书?

Java SSL客户端-何时需要证书?,java,ssl,connection,Java,Ssl,Connection,我有这个: SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory(); SSLSocket socket = (SSLSocket) factory.createSocket("www.verisign.com", 443); 这在第二行失败,出现“连接被拒绝”错误 现在,我是否必须在我的信任存储中安装verisign的证书,然后才能执行上述操作?我的印象是,我可以连接到SSL服务器并执

我有这个:

    SSLSocketFactory factory = HttpsURLConnection.getDefaultSSLSocketFactory();
    SSLSocket socket = (SSLSocket) factory.createSocket("www.verisign.com", 443);
这在第二行失败,出现“连接被拒绝”错误

现在,我是否必须在我的信任存储中安装verisign的证书,然后才能执行上述操作?我的印象是,我可以连接到SSL服务器并执行getPeerCertificates()来获取证书。这不是我们的浏览器所做的吗?否则,他们如何知道使用哪个签名权限


(很明显,我是以Verisign为例的。我的真实URL在这里使用起来太麻烦了…

您是否检查过远程服务是否已经启动并运行,以及您是否可以连接到它?可能“连接被拒绝”错误实际上是一个被拒绝的连接。:-)

通常不需要在计算机上明确安装服务器的证书。PKI的工作方式是,您的系统应该能够验证服务器的证书,而无需事先了解它。但是,只有当服务器的证书的根位于“已知CA”中时,这才有效,即证书颁发机构,其根或其他证书已在客户端系统上列出。如果情况并非如此(例如,您在服务器上有一个自签名证书或其他一些自定义证书),那么您确实需要在客户端系统上安装证书,然后上述类才能正确验证服务器证书


您可以阅读。

连接被拒绝意味着目标主机:端口或防火墙没有监听任何内容。这在逻辑上和时间上先于SSL所做的任何操作。

…您的服务器的证书的根位于“已知CA…其根或其他证书已在客户端系统上列出…因此,如果我要连接的URL具有由Verisign签名的证书(例如)Verisign在我的密钥库中,一切都在幕后运行?顺便说一句,我已经设置了javax.net.ssl.trustStore和javax.net.ssl.keystrepassword环境变量。@Tony不幸的是,我不知道Java ssl类如何验证证书,即Java运行时是否维护自己的受信任证书列表。如果是.net,那么答案是肯定的,你不需要在验证方面做任何明确的事情。对于Java-我不知道。我似乎记得$Java_ROOT/lib/security/cacerts的神奇之处…@Eugene和Tony:Java的根证书存储在信任存储中,默认情况下指向Tony提到的cacerts文件。但是,如果您通过例如设置
javax.net.ssl.trustStore
属性来覆盖此设置,那么您就可以自己操作了。cacerts文件包含一组预受信任的根目录,这些根目录与Windows和Firefox附带的根目录相当。我不得不怀疑我是否被防火墙或其他什么东西烧坏了。我甚至不能这样做:URL URL=new URL(“www.google.com”);HttpURLConnection con=(HttpURLConnection)url.openConnection();然后从con.getInputStream()读取@托尼·恩尼斯:他说那不是他实际连接的网站,但他不想透露URL。问题的最后一句:)是的,但我确实尝试过verisign网站。它也无法连接到那个网站。(问:verisign是否使用自我叹息证书?lolz)