虽然有are similar questions,甚至good answers,但他们要么不关心localhost,要么问一个特定选项/解决方案(自签名与CA)。
有哪些选择?他们如何比较?我这样做吗?
答案 0 :(得分:9)
tl; dr 生成由自己的CA颁发的证书(请参阅下面的脚本)
这是我发现的。在我错误的地方纠正我。
有CA(证书颁发机构)。他们为其他CA(中间CA)或服务器(最终实体证书)颁发证书(签署CSR&#s; s)。其中一些是根权威。他们有自己签发的自签名证书。也就是说,通常存在从服务器证书到根证书的信任链。并且没有人要求证明根证书。因此,OS具有根证书存储(或信任策略存储),系统范围的受信任根证书列表。浏览器拥有自己的可信证书列表,其中包括系统范围列表以及用户信任的证书。
在Chromium中,您可以在chrome:// settings / certificates上管理证书。在Firefox中,Preferences > Privacy & Security > Certificates > View Certificates
。两者都有“权限”选项卡,该选项卡是受信任的根证书列表。和Servers选项卡,可信服务器证书列表。
要获取证书,请创建CSR(证书签名请求),然后将其发送给CA. CA签署CSR,在此过程中将其转换为可信证书。
证书和CSR是一堆包含信息和公钥的字段。一些字段称为扩展。 CA证书是basicConstraints = CA:true
的证书。
您可以在Developer Tools > Security
中检查Chromium中的证书错误。
当你改变OS'根证书存储,您必须重新启动浏览器。你改变它:
# trust anchor path/to/cert.crt
# trust anchor --remove path/to/cert.crt
trust
将CA证书置于"权限"类别(trust list
),或"其他条目"否则。 CA证书显示在浏览器的“权限”选项卡中,或者显示在“服务器”选项卡中。
Firefox并不信任来自OS'的服务器证书。根证书存储,而不是Chromium。两者都信任来自操作系统的CA证书。根证书商店。
在Chromium和Firefox中,您可以向“权限”选项卡添加(导入)证书。如果您尝试导入非CA证书,则会获得"非证书颁发机构"信息。选择文件后,会出现一个对话框,您可以在其中指定信任设置(何时信任证书)。使网站正常工作的相关设置是"信任此证书以识别网站。"
在Chromium中,您可以在“服务器”选项卡上添加(导入)证书。但它们最终会出现在“权限”选项卡上(CA证书,并且在选择文件后未显示信任设置对话框),或者在“其他”选项卡上(如果是非CA证书)。
在Firefox中,您无法在“服务器”标签中准确添加证书。您添加例外。而且你可以信任那些根本没有扩展(差)的证书。
我的系统附带以下默认设置(要添加的扩展名):
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
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)。您可以提前回答#34; -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
#!/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;
...
Morbo:
carton exec morbo --listen='https://*:3000?cert=localhost.crt&key=localhost.key' \
site.pl
P.S。我正在运行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证书安装到当前用户&gt;受信任的根证书颁发机构商店似乎是最佳选择。 确保不要忘记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
答案 1 :(得分:1)
在chrome上,可以浏览到chrome:// flags /#allow-insecure-localhost并启用
允许从本地主机加载的资源使用无效证书。选项
答案 2 :(得分:0)
在浏览器中打开此链接并启用它: https://www.atg.se/spel/2021-01-20/dd/aby-solvalla/avd1
然后重新启动 chrome 并搜索 localhost,你会在那里找到它。