Java 证书中的主机名没有';在通配符证书上不匹配
这可能是apache/服务器配置,也可能需要Java解决方案。在我的服务器上,我有几个子域。我在所有子域上强制使用https,并且我有一个用于所有子域的通配符ssl证书 当我转到并在浏览器中查看证书时,我会看到以下通用名称: CN=*.myvendor.com 我还有一个Java程序,当我使用以下命令从Java发布时,它会发布到:Java 证书中的主机名没有';在通配符证书上不匹配,java,apache,ssl,Java,Apache,Ssl,这可能是apache/服务器配置,也可能需要Java解决方案。在我的服务器上,我有几个子域。我在所有子域上强制使用https,并且我有一个用于所有子域的通配符ssl证书 当我转到并在浏览器中查看证书时,我会看到以下通用名称: CN=*.myvendor.com 我还有一个Java程序,当我使用以下命令从Java发布时,它会发布到: org.apache.http.client.methods.HttpPost httpPost = new HttpPost("https://myapp1.myv
org.apache.http.client.methods.HttpPost httpPost = new HttpPost("https://myapp1.myvendor.com/post.php");
HttpResponse response = httpClient.execute(httpPost);
我得到以下错误:
javax.net.ssl.SSLException: hostname in certificate didn't match:
<myapp1.myvendor.com> != <myvendor.com> OR <myvendor.com> OR <www.myvendor.com>
这与Java中的错误相匹配。如果是这种情况,我的问题是为什么Java会获得此证书而不是浏览器获得的证书?看起来您正在使用SNI,例如,同一IP上的多个https服务器具有不同的证书。在本例中,我们来看看如何在Java中使用SNI。95%您的myapp1.myvendor.com指向您不期望的服务器。即,您的代理设置/主机文件使域指向其他地方。。。或者myapp1.myvendor.com被配置为使用不同于您预期的证书。或者您的服务器执行SNI,而Java没有为其提供选择正确证书所需的信息。@AlexeiLevenkov请参阅我的编辑。我的编辑有意义吗?
<VirtualHost *:443>
SSLEngine On
SSLCertificateFile /etc/pki/tls/certs/27c7d7842bf94d.crt
SSLCertificateKeyFile /etc/pki/tls/private/mydomain.key
SSLCACertificateFile /etc/pki/tls/certs/my_cert.crt
ServerName myapp1.myvendor.com
DocumentRoot /var/www/myvendor/myapp1/src/
ErrorLog /var/www/logs/myapp1/error.log
CustomLog /var/www/logs/myapp1/access.log combined
<Directory /var/www/myvendor/myapp1/src/>
AllowOverride All
</Directory>
</VirtualHost>
<VirtualHost _default_:443>
SSLCertificateFile /etc/pki/tls/certs/local.crt
SSLCertificateKeyFile /etc/pki/tls/private/local.key
SSLCACertificateFile /etc/pki/tls/certs/my_local_cert.crt
</VirtualHost>
subject Alternative name:
DNS Name=myvendor.com
DNS Name=www.myvendor.com