我已经为localhostCN创建了一个自签名的SSL证书。正如预期的那样,Firefox在最初抱怨后接受了这个证书。然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储之后。尽管当我在Chrome的HTTPS弹出窗口中单击“查看证书信息”时,证书被列为正确安装,但它仍然坚称证书不可信。

我该怎么做才能让Chrome接受证书并停止抱怨?


当前回答

修复Windows上的Chrome。

首先,您需要导出证书。

在浏览器中找到url。url的“https”段将为用红线划掉,左侧将有一个锁定符号。右键单击划掉的“https”段。您将看到一个包含各种信息的信息窗口单击“详细信息”。导出证书,按照说明接受默认设置。

要导入

转到Chrome设置单击“高级设置”在HTTPS/SSL下单击“管理证书”转到“受信任的根证书颁发机构”单击“导入”将出现一个弹出窗口,询问您是否要安装此证书。单击“是”。

其他回答

好的,假设你已经创建了一个“有效”的自签名证书。它正确安装在chrome ver 94上。但是当您访问该站点时,您不会得到ssl锁,并且会出现“无效的证书颁发机构”错误。事实上,它是一个有效的证书。但是如果你没有正确浏览网站,你会收到这个错误。我的证书的DNS是DNS1:TFDM,DNS2:TFDM.local,DNS3:172.31.42.251,DNS4:192.168.20.50。

我正在浏览192.168.20.50,它不安全(锁定)。问题是,证书是针对DNS1:TFDM的。因此,我必须输入/etc/hosts文件(centos7)192.168.20.50 TFDM进行解析,然后浏览https://TFDM.问题已解决。您必须正确浏览网站。我以为它会在服务器端解决,但必须在客户端解决。这很容易被忽视,如果其他一切都正确,这可能是你的问题。覆盖安全性和ssl功能会带来麻烦,我认为没有合适的解决方案。如果应用正确,并且遵循Chrome不断更改的规则,自签名证书就可以工作。

通过此方法允许不安全的本地主机正常工作chrome://flags/#allow-不安全的本地主机

只需要将开发主机名创建为xxx.localhost。

当单击URL旁边的小划掉的锁定图标时,您将看到一个如下所示的框:

单击证书信息链接后,您将看到以下对话框:

它告诉哪个证书存储是正确的,它是受信任的根证书颁发机构存储。

您可以使用其他答案中列出的方法之一将证书添加到该存储,也可以使用:

certutil -addstore -user "ROOT" cert.pem

ROOT是前面提到的证书存储的内部名称。cert.pem是自签名证书的名称。

我自己解决了这个问题,没有更改任何具有适当SSL证书的浏览器上的设置。我使用的是mac,所以需要对我的ssl证书进行密钥链更新。我不得不在ssl认证中添加主题alt名称,以便chrome接受它

我的示例很容易使用命令和配置文件:

添加这些文件,这个示例都在一个根目录中

ssl.conf文件

[ req ]
default_bits       = 4096
distinguished_name = req_distinguished_name
req_extensions     = req_ext

[ req_distinguished_name ]
countryName                 = Country Name (2 letter code)
stateOrProvinceName         = State or Province Name (full name)
localityName                = Locality Name (eg, city)
organizationName            = Organization Name (eg, company)
commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_max              = 64

[ req_ext ]
subjectAltName = @alt_names

[alt_names]
DNS.1   = localhost

运行命令以创建证书:

openssl req -newkey rsa:4096 -nodes -keyout key.pem -x509 -days 3650 -out certificate.pem -extensions req_ext -config ssl.conf -subj '/CN=localhost/O=Stackflow/C=US/L=Los Angeles/OU=StackflowTech'

对于仅添加可信证书的Mac(必需):

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./certificate.pem

对于windows,您必须找到如何在本地独立验证我们的ssl证书。我不使用Windows。对不起,窗户的男男女女。

我使用的是带有express.js的node.js服务器,只需要我的密钥和证书,如下所示:

应用程序.js

const https = require('https');
const Express = require('express');
const fs = require('fs');
const app = new Express();
const server = https.createServer({
    key: fs.readFileSync('./key.pem'),
    cert: fs.readFileSync('./certificate.pem'),
}, app);
server.listen(3000);

我可能会在将来为其他后端框架执行此操作,因此我可以在将来为其它框架更新此示例。但这是我在Node.js中解决的问题。清除浏览器缓存并在https上运行应用程序://

下面是一个跑步的例子https://localhost在Mac用户的Node.js服务器上:

https://github.com/laynefaler/Stack-Overflow-running-HTTPS-localhost

快乐编码!

对于Fedora、Ubuntu、Linux,如果您在使用gui添加证书以添加新的根权限时遇到example.com Not a Certification authority错误。如果您希望信任服务器自签名证书,它不能提及无效的授权。。。即使这是它自己。我只通过信任我的权限并使用该权限密钥对服务器证书进行签名来使其工作。

这是它接受的自签名CA证书。这是我找到绕过cert_authority_invalid的唯一方法,我花了几个小时试图让它接受一个自签名的端点证书,没有雪茄。只要声明为CA:TTRUE,用户界面将接受自签名授权。之后,chrome将接受由具有正确DN的密钥签名的所有证书,而无需单独添加它们。

openssl req-new-x509-extensions v3_req-days 8440-config ca.conf-key rockstor.key-out rockstor.cert

[req]
distinguished_name=dn
req_extensions=v3_req
prompt = no

[v3_req]
basicConstraints=CA:TRUE,pathlen:0
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@alt_names

[alt_names]
DNS.1 = ca.tdpowerskills.com

[dn]
C = US
ST = LA
L = Alexandria
O = TDPS Certification Authority
OU = LEARNOPS
CN = ca.tdpowerskills.com

openssl req-new-x509-extensions v3_req-days 8440-config config.conf-key rockstor.key-out rockstor.cert

[req]
distinguished_name=dn
req_extensions=v3_req
prompt = no

[v3_req]
basicConstraints=CA:FALSE
keyUsage = keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth, clientAuth
subjectAltName=@alt_names
issuerAltName=DNS:ca.tdpowerskills.com

[alt_names]
DNS.1 = big.tdps.app

[dn]
C = US
ST = LA
L = Alexandria
O = TDPS Certification Authority
OU = LEARNOPS
CN = ca.tdpowerskills.com

如果这不起作用:

chrome://restart实际重新启动尝试使用firefox获取有关错误的更多详细信息,它会更好地解释错误。。。当chrome会说ERR_CERTIFICATE_INVALID时,firefox会抛出:MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY。请记住,chrome现在需要Subject Alternate Name,并且几乎忽略CN。

对于其他人:

certutil-d sql:$HOME/.pki/nssdb-A-t“P,,”-n<昵称>-i<my.crt>//用于服务器支持certutil-d sql:$HOME/.pki/nssdb-A-t“C,,”-n<昵称>-i<my.crt>用于CAhttps://blogs.oracle.com/meena/about-trust-flags-of-certificates-in-nss-database-that-can-be-modified-by-certutil对于Firefox,添加异常证书的UI确实有效,一旦你这样做,它就会信任它。也许您在/etc/pki/tls/openssl.cnf中有一些时髦的设置,这些设置与您的配置合并在一起。也许您没有向配置或命令行添加扩展,例如v3_req注意,我的方法只需使用授权密钥签署证书并添加开发服务器的详细信息,就不需要CSR。CSR允许更多密钥用于实际安全。我尝试了一切,但chrome需要具有基本约束CA:true集的权限。服务器证书必须由有效的授权机构签名。。。即使这只是他们用CA签名的另一个证书:true。