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中工作的方案?_Java_Ssl_Ssl Certificate_X509certificate_X509 - Fatal编程技术网

主题替代名称必须具有在java中工作的方案?

主题替代名称必须具有在java中工作的方案?,java,ssl,ssl-certificate,x509certificate,x509,Java,Ssl,Ssl Certificate,X509certificate,X509,我有一个带有SAN扩展的SSL证书,其域如下: foo.com bar.foo.com something.foo.com 我已将此证书添加到cacerts,并尝试使用apache http客户端连接到bar.foo.com。 没想到我遇到了一个例外: 由于java.io.IOException导致的不可解析SubjectAlternativeName扩展:URI名称必须包括scheme:foo.com 这让我找到了sun.security.x509.Urumeclass第112行: 对我

我有一个带有SAN扩展的SSL证书,其域如下:

  • foo.com
  • bar.foo.com
  • something.foo.com
我已将此证书添加到cacerts,并尝试使用apache http客户端连接到
bar.foo.com
。 没想到我遇到了一个例外:

由于java.io.IOException导致的不可解析SubjectAlternativeName扩展:URI名称必须包括scheme:foo.com

这让我找到了
sun.security.x509.Urume
class第112行:

对我来说,这意味着SAN域必须在实际域有效之前具有scheme。看来应该是:

事实上,当我在调试代码时替换域时,一切正常

也许我拿到的证书不正确?我看了一下Stackoverflow证书,我看到了什么? SAN域在这里也没有方案,所以我想这些都是正确的

当我使用cURL时,它也可以很好地工作,所以证书是正确的

我发现了以下java错误记录:

人们声称这确实是一个bug,但这些记录已经有15年了——它们是2003/2004年的

显然我做错了什么,因为java不可能长时间存在这个bug

编辑: 查看使用keytool查看证书时出现的类似错误:

keytool -list -keystore truststore.jks -v

(...)

#10: ObjectId: 2.5.29.17 Criticality=false
Unparseable SubjectAlternativeName extension due to
java.io.IOException: URI name must include scheme:foo.com

有几种类型的SAN名称。在TLS中,仅使用
dnsName
名称类型(
ipAddress
很少使用)
dnsName
名称类型仅包括没有任何URI方案的域部分


您所引用的链接()是指另一种SAN名称类型,称为
uriName
,它实际上必须包括协议方案。此名称类型通常用于表示证书和CRL中CRT/CRL/OCSP资源的URL。并且,
Urineme
不用于身份验证。因此,您确实需要这种名称类型:

我认为情况并非如此。我已经编辑了我的问题并添加了keytool也会失败的信息,您能提供SAN扩展转储吗?我根据您在第一个问题中提供的内容发布了我的答案。我可以假定您的SAN格式不正确。SAN扩展的文本转储会很有帮助。我必须更改一些字母,但基本上是这样的
0P..q-fth-sct.xqlav-fth.com..sct.xqlav.com..q-fth-sct.xqlav-fth.com..sct.xqlav.com
,我使用apache http调用的域是
sct.xqlav.com
,它失败了,但我提到的例外情况与此相同根据我的ISP的DNS和Google(8.8.8.8)Cloudfront(1.1.1)Level3(4.2.2.1),keytool throws
sct.xqlav.com
不存在(nxdomain)。如果您拥有(或获得)OpenSSL,
OpenSSL s_客户端-连接主机:443-服务器名主机
将以PEM格式显示您的证书(虚线开始行、base64的几行、虚线结束行);将其添加到您的Q和/或do
openssl x509-noout-text@dave\u thompson\u 085是的,此域不是公共域。这只是一个例子
keytool -list -keystore truststore.jks -v

(...)

#10: ObjectId: 2.5.29.17 Criticality=false
Unparseable SubjectAlternativeName extension due to
java.io.IOException: URI name must include scheme:foo.com