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

这可能是apache/服务器配置,也可能需要Java解决方案。在我的服务器上,我有几个子域。我在所有子域上强制使用https,并且我有一个用于所有子域的通配符ssl证书

当我转到并在浏览器中查看证书时,我会看到以下通用名称:

CN=*.myvendor.com

我还有一个Java程序,当我使用以下命令从Java发布时,它会发布到:

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