gpt4 book ai didi

openssl - 如何让浏览器信任本地主机 SSL 证书?

转载 作者:行者123 更新时间:2023-12-01 15:53:30 27 4
gpt4 key购买 nike

虽然,有 are similar questions ,甚至 good answers ,他们要么不特别关注本地主机,要么询问一个特定的选项/解决方案(自签名 vs CA)。
有什么选择?他们如何比较?我怎么做?

最佳答案

tl;博士 生成由自己的 CA 颁发的证书(请参阅下面的脚本)

这是我发现的。纠正我我错的地方。

有 CA(证书颁发机构)。他们为其他 CA(中间 CA)或服务器(最终实体证书)颁发证书(签署 CSR)。其中一些是根权限。他们有自己签发的自签名证书。也就是说,通常有一个从服务器证书到根证书的信任链。并且没有人可以保证根证书。因此,操作系统有一个根证书存储(或信任策略存储),一个系统范围的受信任根证书列表。浏览器有自己的可信证书列表,它由系统范围的列表加上用户信任的证书组成。

在 Chromium 中,您可以通过 chrome://settings/certificates 管理证书。在 Firefox 中,Preferences > Privacy & Security > Certificates > View Certificates .两者都有 Authorities 选项卡,这是受信任的根证书列表。和服务器选项卡,受信任的服务器证书列表。

要获取创建 CSR(证书签名请求)的证书,请将其发送给 CA。 CA 签署 CSR,在此过程中将其转换为受信任的证书。

证书和 CSR 是一堆带有信息和公钥的字段。一些字段称为扩展。 CA证书是带有basicConstraints = CA:true的证书.

您可以在 Developer Tools > Security 中检查 Chromium 中的证书错误.

在系统范围内信任证书

当您更改操作系统的根证书存储时,您必须重新启动浏览器。你改变它:

# trust anchor path/to/cert.crt
# trust anchor --remove path/to/cert.crt
trust将 CA 证书置于“权威”类别( trust list )或“其他条目”类别下。 CA 证书出现在浏览器的 Authorities 选项卡中,或者出现在 Servers 选项卡中。

与 Chromium 不同,Firefox 不信任来自操作系统根证书存储的服务器证书。两者都信任来自操作系统根证书存储的 CA 证书。

在浏览器中信任证书

在 Chromium 和 Firefox 中,您可以将证书添加(导入)到 Authorities 选项卡。如果您尝试导入非 CA 证书,则会收到“不是证书颁发机构”消息。选择文件后,会出现一个对话框,您可以在其中指定信任设置(何时信任证书)。使网站工作的相关设置是“信任此用于识别网站的证书”。

在 Chromium 中,您可以在服务器选项卡上添加(导入)证书。但它们最终会出现在“权限”选项卡(CA 证书,并且在选择文件后不会显示信任设置对话框)或“其他”选项卡(如果是非 CA 证书)。

在 Firefox 中,您无法准确地将证书添加到服务器选项卡。您添加异常(exception)。而且您可以信任那里根本没有扩展名(差)的证书。

自签名证书扩展

我的系统带有以下证书的默认设置(要添加的扩展):
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer

取自 /etc/ssl/openssl.cnf , 节 v3_ca .更多相关信息 here .

此外,当 Chromium 没有 subjectAltName = DNS:$domain 时,它会认为证书无效。 .

非自签名证书扩展

来自 [ usr_cert ] /etc/ssl/openssl.cnf :
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer

当浏览器信任自签名证书时

要让 Chromium 信任自签名证书,它必须具有 basicConstraints = CA:true , 和 subjectAltName = DNS:$domain .对于 Firefox 来说,这还不够:
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain

当浏览器信任由自己的 CA 颁发的证书时

Firefox 不需要扩展,但 Chromium 需要 subjectAltName .
openssl备忘单
openssl genpkey -algorithm RSA -out "$domain".key - 生成私钥( man )
openssl req -x509 -key "$domain".key -out "$domain".crt - 生成自签名证书 ( man )

-subj它将询问有关专有名称 (DN) 的问题,例如通用名称 (CN)、组织 (O)、位置 (L)。您可以“提前”回答: -subj "/CN=$domain/O=$org" .

添加 subjectAltName扩展,你要么有一个配置,其中所有的都被指定,或者添加一个部分到配置并告诉 openssl它的名字是 -extensions转变:
    -config <(cat /etc/ssl/openssl.cnf - <<END
[ x509_ext ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
END
) -extensions x509_ext
openssl req -new -key "$domain".key -out "$domain".csr - 生成CSR,可以取 -subj选项 ( man )
openssl x509 -req -in "$domain".csr -days 365 -out "$domain".crt \
-CA ca.crt -CAkey ca.key -CAcreateserial
- 签署 CSR ( man )

没有 -CAcreateserial 不起作用.它创建了一个 ca.srl文件,它保存最后生成的证书的序列号。添加 subjectAltName , 你会需要 -extfile转变:
    -extfile <(cat <<END
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:$domain
END
)
openssl req -in $domain.csr -text -noout - 查看 CSR ( man )
openssl x509 -in $domain.crt -text -noout - 查看证书 ( man )

生成自签名证书

(你需要在 Firefox 中设置一个异常才能工作)

#!/usr/bin/env bash
set -eu
org=localhost
domain=localhost

sudo trust anchor --remove "$domain".crt || true

openssl genpkey -algorithm RSA -out "$domain".key
openssl req -x509 -key "$domain".key -out "$domain".crt \
-subj "/CN=$domain/O=$org" \
-config <(cat /etc/ssl/openssl.cnf - <<END
[ x509_ext ]
basicConstraints = critical,CA:true
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid:always,issuer
subjectAltName = DNS:$domain
END
) -extensions x509_ext

sudo trust anchor "$domain".crt

生成由自己的 CA 颁发的证书

#!/usr/bin/env bash
set -eu
org=localhost-ca
domain=localhost

sudo trust anchor --remove ca.crt || true

openssl genpkey -algorithm RSA -out ca.key
openssl req -x509 -key ca.key -out ca.crt \
-subj "/CN=$org/O=$org"

openssl genpkey -algorithm RSA -out "$domain".key
openssl req -new -key "$domain".key -out "$domain".csr \
-subj "/CN=$domain/O=$org"

openssl x509 -req -in "$domain".csr -days 365 -out "$domain".crt \
-CA ca.crt -CAkey ca.key -CAcreateserial \
-extfile <(cat <<END
basicConstraints = CA:FALSE
subjectKeyIdentifier = hash
authorityKeyIdentifier = keyid,issuer
subjectAltName = DNS:$domain
END
)

sudo trust anchor ca.crt

网络服务器配置

nginx:
server {
listen 443 ssl;
ssl_certificate ssl/localhost.crt;
ssl_certificate_key ssl/localhost.key;
...

莫波:
carton exec morbo --listen='https://*:3000?cert=localhost.crt&key=localhost.key' \
site.pl

附言我正在运行 Chromium 65.0.3325.162、Firefox 59.0 和 openssl-1.1.0.g .

视窗

显然,Windows 没有 trust公用事业。在 Windows 下有 two stores :本地机器和当前用户证书存储。使用本地机器证书存储没有意义,因为我们让它只为我们当前的用户工作。然后,有子商店。其中两个预定义最受关注:受信任的根证书颁发机构和中间证书颁发机构存储。通常在命令行中称为 root and CA .

您可以通过 chrome://settings/?search=Manage%20certificates 访问 Chrome 的证书管理器,然后单击管理证书。最感兴趣的是受信任的根证书颁发机构和中间证书颁发机构选项卡。

管理证书的一种方法是通过 command line :
>rem list Current User > Trusted Root Certification Authorities store
>certutil.exe -store -user root

>rem list Local Machine > Intermediate Certification Authorities store
>certutil.exe -store -enterprise CA

>rem GUI version of -store command
>certutil.exe -viewstore -user CA

>rem add certificate to Current User > Trusted Root Certification Authorities store
>certutil.exe -addstore -user root path\to\file.crt

>rem delete certificate from Current User > Trusted Root Certification Authorities store by serial number
>certutil.exe -delstore -user root 03259fa1

>rem GUI version of -delstore command
>certutil.exe -viewdelstore -user CA

结果如下(对于本地机器和当前用户证书存储):
root
localhost.crt
error
ca.crt
appears in Trusted Root Certification Authorities tab
CA
localhost.crt
doesn't work, appears in Other People tab
ca.crt
doesn't work, appears in Intermediate Certification Authorities tab

其他选项包括在资源管理器中双击证书、从 Chrome 的证书管理器导入证书、使用证书 MMC 管理单元(运行 certmgr.msc)或使用 CertMgr.exe .

对于那些拥有 grep安装后,这里是如何快速检查证书在哪里:
>certutil.exe -store -user root | grep "localhost\|^root\|^CA" ^
& certutil.exe -store -user CA | grep "locahost\|^root\|^CA" ^
& certutil.exe -store -enterprise root | grep "localhost\|^root\|^CA" ^
& certutil.exe -store -enterprise CA | grep "localhost\|^root\|^CA"

因此,将 CA 证书安装到 Current User > Trusted Root Certification Authorities 商店似乎是最好的选择。和 确保 不要忘记 restart your browser .

补充阅读

OpenSSL
genpkey
req
x509
OpenSSL Certificate Authority
Certificates for localhost
iamaCA - Become your own certificate authority and dispense certifications
Firefox and Self-Signed Certs
Bypassing certificate error page in Chrome

关于openssl - 如何让浏览器信任本地主机 SSL 证书?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49553138/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com