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
Google chrome *.test域的本地HTTPS证书出现问题_Google Chrome_Ssl_Ssl Certificate - Fatal编程技术网

Google chrome *.test域的本地HTTPS证书出现问题

Google chrome *.test域的本地HTTPS证书出现问题,google-chrome,ssl,ssl-certificate,Google Chrome,Ssl,Ssl Certificate,我用通配符证书战斗度过了美好的一天 现在,本地开发不可能使用.dev,所以我们使用*.test。我需要测试HTTPS,所以我创建了通配符证书 由于Chrome v58忽略了“commonName”,用户应该使用SAN来指定域名(此处有更多关于此主题的信息:) 无论如何:在我的系统(mac os/Docker/Chrome)上,通配符有问题-如果我在证书中指定整个域,它就可以工作(比如.test)-但是当我使用通配符时,Chrome仍然会生成以下错误消息:NET::ERR\u CERT\u COM

我用通配符证书战斗度过了美好的一天

现在,本地开发不可能使用.dev,所以我们使用*.test。我需要测试HTTPS,所以我创建了通配符证书

由于Chrome v58忽略了“commonName”,用户应该使用SAN来指定域名(此处有更多关于此主题的信息:)

无论如何:在我的系统(mac os/Docker/Chrome)上,通配符有问题-如果我在证书中指定整个域,它就可以工作(比如.test)-但是当我使用通配符时,Chrome仍然会生成以下错误消息:NET::ERR\u CERT\u COMMON\u NAME\u INVALID

我尝试了几乎所有可能的方法,但没有成功:(

更多信息:

我的bash脚本:

openssl req \
-x509 \
-nodes \
-new \
-newkey rsa:2048 \
-keyout test.key \
-out test.crt \
-sha256 \
-days 3650 \
-config <(cat <<EOF

[ req ]
prompt = no
distinguished_name = subject
x509_extensions    = x509_ext

[ subject ]
commonName = *.test

[ x509_ext ]
subjectAltName = @alternate_names

[ alternate_names ]
DNS.1 = *.test
DNS.2 = test

EOF
)
openssl请求\
-x509\
-节点\
-新的\
-新密钥rsa:2048\
-键出测试\
-out test.crt\
-sha256\
-第3650天\
-配置
您可以使用
*。test
供个人使用。另请参阅。RFC 6761非常具体,用户软件不应将
*。test
与任何其他域名区别对待,因此不要期望浏览器或其他用户代理为
*。test
做一些特殊的事情。问题在于其他地方

概括地说,有两个组织发布运行公共PKI的标准。第一个是CA/浏览器论坛,发布策略由浏览器遵循。第二个是IETF,其发布策略由其他用户代理(如cURL、OpenSSL和Wget)遵循

从浏览器的角度来看,
*.test
似乎是一个(即类似于
*.google
的虚荣域)。CA/B不允许顶级通配符

相比之下,IETF并不禁止对顶级域进行通配符编码,如
*.com
*.net
*.test
。cURL和Wget等用户代理可能会允许通配符编码
*.test

这来自CA/B。自2013年起生效:

授权域名

用于获取证书颁发授权的域名 对于给定的FQDN。CA可以使用从DNS CNAME返回的FQDN 查找为FQDN以进行域验证。如果 包含通配符,则CA必须删除所有通配符 来自请求的FQDN最左侧部分的标签。CA可能会删除 从左到右零个或多个标签,直到遇到底部 域名,并且可以使用 域验证的目的


如果我在证书中指定了整个域,它就会工作(比如
something.test

如果希望浏览器使用证书,则必须使用
something.test
*.something.test

或者,使用不同的用户代理,如cURL或Wget


但当我使用通配符时,Chrome仍然会生成以下错误消息:NET::ERR\u CERT\u COMMON\u NAME\u INVALID

名称无效,因为您对顶级域进行了通配符,并且用户代理遵循CA/B颁发策略

此外,在
CommonName
中放置主机名多年来一直被弃用。在过去几年中,它一直没有被禁止。我知道CA/B基线要求很快将禁止它。IETF stll允许它。这来自CA/B:

证书字段:主题:commonName(OID 2.5.4.3)
必需/可选:不推荐(不鼓励,但不禁止)
内容:如果存在,此字段必须包含作为值之一的单个IP地址或完全限定域名 包含在证书的subjectAltName扩展名中(请参阅 第7.1.4.2.1节)

简而言之,不要将主机名放在
CommonName
中。在那里放一个友好的名称,比如示例Widgets,LLC。将主机名和其他名称放在
SubjectAltName

我知道有些证书会完全忽略
CommonName
。例如,请参阅。Crypto++网站试图将CommonName设置为“Crypto++”,因为它是一个友好的名称,但发行人担心“+”符号有时会破坏脚本。因此,该字段被完全忽略


现在,无法使用.dev进行本地开发

这是一种病态的有趣方式。我很想了解为什么它不可能,因为它似乎是开发网络段的一个好选择

为了完整起见,我的家庭网络是
*.pvt
。我有一个CA,可以在需要时颁发证书。我从来没有遇到过任何问题


无论如何:在我的系统(mac os/Docker/Chrome)上,通配符有问题

有趣的是Docker遇到了麻烦。我希望Docker遵循IETF发布策略并允许它。我不知道他们遵循CA/B发布策略并拒绝了它


Docker可能正在运行一个加固的安装并拒绝它。Tim Rühsen有一个GitHub提供。我相信libpsl会拒绝顶级域上的通配符。

噢,@jww,非常感谢您提供了非常复杂的答案。一般来说,这是非常痛苦的情况,因为对于本地开发来说,使用*.test是合乎逻辑的。很遗憾,这是brakes甚至在.test TLD的情况下也有规则:(还有一个答案是为什么.dev不可用:63版的Google Chrome为一些TLD提供了一种内部强制HST机制,包括.dev(归Google所有)因此,从技术上讲,您可以使用*.dev进行内部开发,但所有的流量都可以自动从HTTP重定向到HTTPS,您对此无能为力。简单的回答是-我们不能使用*.test,geezSo您是说我们需要自己的CA,还是我们可以使用任意TLD,只要它不是
。test
。dev
等等?@crmpicco刚刚
[ alternate_names ]
DNS.1 = *.test
DNS.2 = test
[ subject ]
commonName = *.test