java - 证书中的主机名与通配符证书不匹配

标签 java apache ssl

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

当我转到 https://myapp1.myvendor.com 时并在浏览器中查看证书,我看到以下通用名称:

CN = *.myvendor.com

我还有一个发布到 https://myapp1.myvendor.com/post.php 的 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>

令我感到奇怪的是,它试图匹配 myvendor.com 或 www.myvendor.com 而不是 *.myvendor.com。我确实为 myvendor.com 安装了证书,但我停止使用它以支持通配符证书。

有什么建议吗?您需要更多信息吗?

Apache 配置:

<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

这与来自 Java 的错误相匹配。如果是这种情况,我的问题是为什么 Java 获得此证书而不是浏览器获得的证书?

最佳答案

看起来您正在使用 SNI,例如具有不同证书的同一 IP 上的多个 https 服务器。在这种情况下,请查看 Server Name Indication (SNI) on Java如何在 Java 中使用 SNI。

关于java - 证书中的主机名与通配符证书不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22722085/

相关文章:

java - 错误 : Bound mismatch, Collections.sort、接口(interface)、compareTo 方法

java - wsdl2java 在没有服务的情况下使用 Apache Axis2 for WSDL

php - 用户 '' @'localhost' 的访问被拒绝(使用密码 : NO)

Appcelerator Titanium 中使用 SSL 的套接字

使用 gcloud 的负载均衡器 SSL 证书

java - UTF-8 字符在 JOptionPane 中不正确

java - Android 上动态创建的内容 - 检索 friend 的最新帖子

linux - 我怎样才能让apache包含文件夹中的所有文件

ssl - 使用 PINS 的学校申请是否需要 SSL

Java安全管理器异常