让Chrome接受自签名的localhost证书

pjo*_*son 1080 ssl google-chrome certificate self-signed

我为localhost CN创建了一个自签名SSL证书.Firefox正如预期的那样在最初抱怨之后接受此证书.然而,Chrome和IE拒绝接受它,即使在将证书添加到Trusted Roots下的系统证书存储区之后也是如此.即使我在Chrome的HTTPS弹出窗口中单击"查看证书信息"时列出的证书已正确安装,但仍然坚持认证证书不可信.

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

Chr*_*ris 640

不是为了PROD

只需将其粘贴到您的chrome中:

chrome://flags/#allow-insecure-localhost
Run Code Online (Sandbox Code Playgroud)

您应该看到突出显示的文本说:允许从localhost加载的资源的无效证书

点击localhost.

  • 不适用于127.0.0.1的非localhost域 (42认同)
  • 不适用于*.dev或*.app或*.test等本地环境TLD (17认同)
  • 我不知道为什么对这个答案进行了投票,但是无效证书和自签名证书之间有区别。问题是关于自签名证书。 (7认同)
  • 这 - 如果你能忍受恼人的红色不安全信息.否则,需要几个小时的神秘openssl咒语然后尝试处理Chrome中的内部证书管理器. (5认同)
  • 禁用警告......但也禁用缓存!https://bugs.chromium.org/p/chromium/issues/detail?id=103875 (3认同)
  • 如果您希望您的启动开发在计算机之间更具可移植性,使用命令行标志 `--allow-insecure-localhost` 启动 chrome 似乎也可以工作 (3认同)
  • 如果你在隐身模式下使用chrome(例如切换身份),这将无效,否则非常干净 (2认同)
  • 根本没有为我工作。对我有用的是生成一个包含subjectAltName的自签名证书,如以下答案所述:/sf/answers/3004205921/ (2认同)
  • 似乎此选项已更改为: chrome://flags/#block-insecure-private-network-requests (2认同)
  • 感谢上帝,我向下滚动找到了这个答案。耶稣。 (2认同)

kel*_*len 487

这对我有用:

  1. 使用Chrome,通过HTTPS点击服务器上的页面并继续浏览红色警告页面(假设您尚未执行此操作).
  2. 打开Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates.
  3. 单击Authorities选项卡并向下滚动以在您为证书提供的组织名称下查找证书.
  4. 选择它,单击编辑(注意:在最新版本的Chrome中,按钮现在是"高级"而不是"编辑"),选中所有框并单击确定.您可能需要重新启动Chrome.

你现在应该在你的页面上得到漂亮的绿色锁.

编辑:我在一台新机器上再次尝试了这一点,只是从红色不受信任的证书页面继续,证书没有出现在"管理证书"窗口中.我必须做以下事情:

  1. 在包含不受信任证书的页面上(https://以红色划掉),单击锁定>证书信息.注意:在较新版本的chrome上,您必须打开Developer Tools > Security并选择View certificate.
  2. 点击Details tab > Export.选择PKCS #7, single certificate文件格式.
  3. 然后按照我的原始说明进入"管理证书"页面.单击Authorities tab > Import并选择导出证书的文件,并确保选择 PKCS #7, single certificate 作为文件类型.
  4. 如果提示认证存储,请选择" 受信任的根证书颁发机构"
  5. 选中所有框并单击"确定".重启Chrome.

  • 我在Linux机器上试过这个,但它说导入失败了因为xxx.xxx.com:不是证书颁发机构. (138认同)
  • 从Chrome 56开始,要在Windows中访问SSL证书设置,您必须使用开发人员工具(CTRL + SHIFT + i),转到"安全"选项卡并单击"查看证书"按钮. (32认同)
  • 在Chrome 37中,没有一个有用的,描述性的"导出"按钮,这似乎已经取代了精彩的"复制到文件"按钮.为什么"出口"没有得到保留,头脑只会令人难以置信 (19认同)
  • 谢谢@kellen .. 但是,使用 Chrome 版本 29.0.1547.57 测试版,证书信息中的任何地方似乎都没有“导出”选项。也就是说,有一个“详细信息”*部分*,但它不是选项卡的形式。它显示为一个可折叠/可扩展的块。http://i.imgur.com/dDmNEIh.png (14认同)
  • @Jakobud,只需将证书符号拖到桌面或其他东西即可导出.但是,据我所知,其余的答案在OS X(Yosemite)上无效(Chrome 39). (13认同)
  • chrome://settings/certificates 不再有效,并且 Chrome 设置 > 安全 > 管理证书中没有“权限”选项卡。有人收到更新的说明了吗? (8认同)
  • 这似乎对我在Windows 8.1上的chrome v44.0.2403.107 m上没有用.成功将证书导出到PKCS文件后,我尝试将其导入"个人"选项卡,但它从未显示.然后我尝试将其导入"受信任的发布者",它确实出现了.但即使重启后,https仍然在端口8090上发出警告,并且wss彻底失败. (6认同)
  • 这在Chrome 62.0.3202.89中无效.安装的证书,重新启动,以及cal到https://localdomain.tld仍然显示错误. (6认同)
  • 管理证书对话框似乎可以通过URL chrome:// settings/certificates访问 (5认同)
  • 在使用localhost作为CA的Linux上,这对我来说非常有效.在这方面,Chrome远远落后于Firefox,实在太糟糕了.只需点击几下鼠标,FF就可以非常简单地添加可信证书. (3认同)
  • 在OSX上,我没有在"证书详细信息"弹出窗口中看到"导出"按钮. (3认同)
  • 谢谢,我确实想到了这一点.将其拖动到桌面后,可以将其导入OSX Keychain.谢谢 (3认同)
  • 在导入过程中,最重要的一步是确保证书进入正确的商店.如果您将其存储在个人身份中,Chrome将不会授予证书权限.但是,如果你把它放在***受信任的根证书颁发机构***商店,那么它的工作原理.请记住,您需要重新启动chrome以查看已应用的证书. (3认同)
  • 在Linux +最新的Chrome上,这些说明无效.我收到一条消息"**证书颁发机构导入错误**该文件包含一个未导入的证书:localhost:不是证书颁发机构." 在尝试导入时.我尝试了很多证书类型,扩展程序,重新启动的Chrome等. (3认同)
  • 我放弃了尝试从Chrome导出证书.然而,使用Firefox导出证书是有效的.然后我可以使用上面列出的步骤将证书添加到我的钥匙串中 (3认同)
  • @matt:是的,我已经通过一些证书了.尝试导入除权威机构以外的选项卡?否则,我不确定解决方法是什么. (2认同)
  • 好吧,我将它添加到"受信任的根证书颁发机构"选项卡并重新启动chrome后,我就开始工作了.不知道为什么铬对此如此痛苦.谢谢! (2认同)
  • 对于pkcs#7类型证书,应选择扩展名.p7b (2认同)
  • 已删除查看SSL证书详细信息的选项https://productforums.google.com/forum/#!topic/chrome/dDTJYdWTUxM;context-place=topicsearchin/chrome/category$3ABeta (2认同)
  • @matt您是否解决了"非证书颁发机构"问题? (2认同)

Jel*_*Cat 338

随着只有5 openssl命令,你可以做到这一点。

请不要更改您的浏览器安全设置。

使用以下代码,您可以 (1) 成为您自己的 CA,(2) 然后将您的 SSL 证书签名为 CA。(3) 然后将 CA 证书(不是 SSL 证书,它进入您的服务器)导入 Chrome/Chromium。(是的,这甚至适用于 Linux。)

注意:对于Windows,一些报告说openssl必须运行winpty以避免崩溃。

######################
# Become a Certificate Authority
######################

# Generate private key
openssl genrsa -des3 -out myCA.key 2048
# Generate root certificate
openssl req -x509 -new -nodes -key myCA.key -sha256 -days 825 -out myCA.pem

######################
# Create CA-signed certs
######################

NAME=mydomain.com # Use your own domain name
# Generate a private key
openssl genrsa -out $NAME.key 2048
# Create a certificate-signing request
openssl req -new -key $NAME.key -out $NAME.csr
# Create a config file for the extensions
>$NAME.ext cat <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names
[alt_names]
DNS.1 = $NAME # Be sure to include the domain name here because Common Name is not so commonly honoured by itself
DNS.2 = bar.$NAME # Optionally, add additional domains (I've added a subdomain here)
IP.1 = 192.168.0.13 # Optionally, add an IP address (if the connection which you have planned requires it)
EOF
# Create the signed certificate
openssl x509 -req -in $NAME.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial \
-out $NAME.crt -days 825 -sha256 -extfile $NAME.ext
Run Code Online (Sandbox Code Playgroud)

回顾一下:

  1. 成为 CA
  2. 使用您的 CA 证书 + 密钥签署您的证书
  3. 导入myCA.pem为“管理局”(不是在你的Chrome浏览器设置为“您的证书”)(设置>管理证书>机构>导入)
  4. 使用服务器中的$NAME.crt$NAME.key文件

额外步骤(至少对于 Mac):

  1. 在“文件 > 导入文件”中导入 CA 证书,然后也在列表中找到它,右键单击它,展开“> 信任”,然后选择“始终”
  2. 添加extendedKeyUsage=serverAuth,clientAuth下面basicConstraints=CA:FALSE,并确保将“CommonName”设置为与$NAME要求设置时相同

您可以检查您的工作以确保正确构建证书:

openssl verify -CAfile myCA.pem -verify_hostname bar.mydomain.com mydomain.com.crt
Run Code Online (Sandbox Code Playgroud)

  • 在 Windows 上的 Chrome/ium 中,当您尝试导入证书时,pem 未在可用文件扩展名中列出,但仍然可以导入它(只需选择所有文件过滤器)。 (9认同)
  • 伟大的!对于像我这样的 Mac 用户,有两点注意:在最后一行,使用 `-days 825` 而不是 `-days 1825`,因为 https://superuser.com/questions/1492643/chrome-neterr-cert-revoked-for- trust-self-signed-root-ca,值得注意的是,要将根证书导入到Key Chain Access中,您不仅需要“文件&gt;导入文件”,而且还需要在列表中找到它,右键单击它,展开“&gt;信任”,然后选择“始终”。 (7认同)
  • 如果您的本地开发服务器需要 **PEM** 文件而不是 **CRT** 文件,请不要担心,只需合并 **.crt** 和 **.csr** 文件并将它们另存为**.pem** 文件,就可以开始了。 (6认同)
  • @maverick 浏览器和操作系统附带了有限数量的他们信任的 CA。尽管任何人都可以成为 CA,但为了让任何人信任他们的证书,他们需要人们手动将其添加为受信任的 CA(正如我们在手动导入证书时告诉 Chrome 所做的那样)。 (5认同)
  • 终于成功了!这个答案太棒了。请不要忘记将 myCA.pem 加载到您的 Chrome 或 Firefox(设置 &gt; 管理证书 &gt; 权限 &gt; 导入) (5认同)
  • 我将基于 IP 的 LAN 服务器的 DNS.1 更改为 IP.1。有用。谢谢。 (4认同)
  • 说明有点不清楚这个“NAME=mydomain.com”应该去哪里?这里是“通用名称(例如服务器 FQDN 或您的名字)[]:”吗? (3认同)
  • 谢谢你!我读到的有关此问题的其他所有内容都没有提到创建您自己的签名权限。问题解决了。 (2认同)
  • 这工作完美,谢谢!我根据您的答案创建了[几个脚本](https://github.com/BenMorel/dev-certificates),以使我的生活更轻松。不确定您是否想在答案中链接到它。干杯! (2认同)
  • 有人请这个人喝啤酒。自 2021 年 2 月 23 日起可在我的 Debian 工作站上运行。请务必将 .pem 文件导入“权威”,而不是“您的证书” (2认同)
  • 我使用了这个带有通配符域的优秀脚本,并在 chrome 中得到了 NET::ERR_CERT_COMMON_NAME_INVALID (v 91)。小修改修复了它。将 [SAN] 部分放在 `subjectAltName = @alt_names` 之上。并将 ** -extensions SAN** 添加到证书创建命令: `openssl x509 -req -in $NAME.csr -CA myCA.pem -CAkey myCA.key -CAcreateserial -out $NAME.crt -days 825 -sha256 -extensions SAN -extfile $NAME.ext` (2认同)

Tob*_*s J 154

更新58+更新(续期2017-04-19)

从Chrome 58开始,仅commonName 删除使用主机.另见这里的讨论,并在这里bug跟踪系统.过去,subjectAltName仅用于多主机证书,因此某些内部CA工具可能不包含它们.

如果您的自签名证书在过去工作正常但突然开始在Chrome 58中产生错误,这就是原因.

因此,无论您使用何种方法生成自签名证书(或由自签名CA签名的证书),请确保服务器的证书包含subjectAltName具有正确subjectAltName和/或DNS条目/条目的证书,即使它仅适用于单个主机.

对于openssl,这意味着您的OpenSSL配置(IP在Ubuntu上)应该具有类似于以下内容的单个主机:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com
Run Code Online (Sandbox Code Playgroud)

或多个主机:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com, DNS:host1.example.com, DNS:*.host2.example.com, IP:10.1.2.3
Run Code Online (Sandbox Code Playgroud)

在Chrome的浏览器证书(已移至下F12"安全"选项卡上),你应该看到它下面列出/etc/ssl/openssl.cnfExtensions:

Chrome证书查看器

  • 感谢您发布有关Chrome 58+更新的信息!对于希望在Windows中创建包含SAN的自签名证书的人来说,一种简单的方法是使用New-SelfSignedCertificate PowerShell命令行开关.`New-SelfSignedCertificate -DnsName localhost -CertStoreLocation cert:\ LocalMachine\My` (10认同)
  • *"在Chrome的证书查看器(已移至F12下的"安全"选项卡)中,您应该看到它在"扩展名"下列为"证书主题备用名称".*我带的时候看不到任何"扩展"部分在F12开发工具(Chrome 62)中的"安全"选项卡上.它被转移到其他地方吗? (4认同)
  • @DanO谢谢!在Win10上,没有其他解决方法适合我.很高兴知道至少Powershell会生成有效的证书! (3认同)
  • 要在Linux上创建策略,您需要使用以下内容创建一个策略文件,例如`/ etc/opt/chrome/policies/managed/EnableCommonNameFallbackForLocalAnchors.json`:`{"EnableCommonNameFallbackForLocalAnchors":true}` (3认同)

bjn*_*ord 138

在Mac上,您可以使用Keychain Access实用程序将自签名证书添加到系统钥匙串,然后Chrome将接受它.我在这里找到了分步说明:

谷歌浏览器,Mac OS X和自签名SSL证书

基本上:

  1. 双击带有X的锁图标并将证书图标拖放到桌面,
  2. 打开此文件(以.cer扩展名结尾); 这将打开钥匙串应用程序,允许您批准证书.

  • 重要的是,您可能需要重新启动Chrome才能生效. (11认同)
  • 我必须编辑证书首选项并允许手动信任SSL (9认同)
  • 不适用于macOS High Sierra和Chrome 63。 (3认同)
  • 在钥匙串应用程序中打开证书后,编辑信任设置并将 SSL 设置为“始终信任” (3认同)
  • 在El Capitan工作,无需重启.我添加了证书,点击它,扩展了Trust下拉列表并将其设置为SSL Always部分的"Always Trust".基本上是@NeDark说的. (2认同)

Yev*_*yev 108

单击页面上的任意位置并键入BYPASS_SEQUENCE

" thisisunsafe"是Chrome版本65的BYPASS_SEQUENCE

" badidea"Chrome版本62 - 64.

" danger"曾用于早期版本的Chrome

您不需要查找输入字段,只需键入它即可.这感觉很奇怪,但它确实有效.

我在Mac High Sierra上试过了.

要仔细检查是否再次更改它,请转到最新的铬源代码

要查找BYPASS_SEQUENCE,目前它看起来像:

var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');
Run Code Online (Sandbox Code Playgroud)

现在他们伪装了,但要看到真正的BYPASS_SEQUENCE,您可以在浏览器控制台中运行以下行.

console.log(window.atob('dGhpc2lzdW5zYWZl'));
Run Code Online (Sandbox Code Playgroud)

  • 我非常怀疑这是否真的有效,感觉就像在游戏中输入作弊代码一样。但你瞧,“thisisunsafe”确实适用于 Chrome 86。 (10认同)
  • wtf,谢谢这对我有用ubuntu 16.04 63.0.3239.84 (6认同)
  • 此代码自新版本以来已更改.新短语是`thisisunsafe` (6认同)
  • 在Windows 10上的Chrome 65中,键入`thisisunsafe`似乎只会影响将此站点添加到例外.(地址栏仍以红色显示"不安全".) (6认同)
  • 从 Chrome 87 开始仍然有效 (3认同)
  • 在 Chrome 88 中仍然有效,哈哈 (3认同)
  • 如果您看到“此证书无效”页面,只需输入字母,窗口就会重新加载并显示页面内容。(我也在 Chrome 91 上,对我来说它仍然有效。) (3认同)
  • 这是有效但只是第一次加载,如果你导航页面,你必须再次输入bupass_squence (2认同)
  • 我这辈子你都去哪儿了?!谢谢 (2认同)
  • 您可以将代码部分粘贴到控制台 `sendCommand(SecurityInterstitialCommandId.CMD_PROCEED)` 中,而不是输入短语 (2认同)
  • 这仍然适用于 2022 年 4 月的 Chrome 版本 100。 (2认同)

kmg*_*dev 90

更新11月11日:这个答案可能不适用于大多数较新版本的Chrome.

更新02/2016:可以在这里找到更好的Mac用户说明.

  1. 在要添加的站点上,右键单击地址栏中的红色锁图标:在此输入图像描述

    1. 单击标签为Connection的选项卡,然后单击Certificate Information

    2. 单击" 详细信息"选项卡,单击" 复制到文件... "按钮.这将打开"证书导出向导",单击" 下一步"进入" 导出文件格式"屏幕.

    3. 选择DER编码二进制X.509(.CER),单击" 下一步"

    4. 单击" 浏览..."并将文件保存到计算机.将其命名为描述性的.单击Next,然后单击Finish.

    5. 打开Chrome设置,滚动到底部,然后点击显示高级设置...

    6. HTTPS/SSL下,单击管理证书...

    7. 单击" 受信任的根证书颁发机构"选项卡,然后单击" 导入..." 按钮.这将打开"证书导入向导".单击" 下一步"转到" 要导入文件"屏幕.

    8. 单击" 浏览..."并选择之前保存的证书文件,然后单击" 下一步".

    9. 选择将所有证书放在以下存储中.所选商店应为受信任的根证书颁发机构.如果不是,请单击" 浏览..."并选择它.单击下一步完成

    10. 在安全警告上单击.

    11. 重启Chrome.

  • 我做到了,对我不起作用:( (40认同)
  • @AJeneral是的,Chrome又改变了.[本文](http://goo.gl/L0Bvoa)中的说明最近为我工作. (2认同)
  • 截至本评论发布之日,Mac Chrome上不存在此选项. (2认同)
  • @kgrote,**Chrome 没有自己的证书库。** 它所做的只是添加和删除 Windows 证书库。因此,更好的方法是简单地使用 `certmgr.msc` 来添加和删除证书。 (2认同)
  • 在我的机器上不起作用(win10 + chrome48) (2认同)
  • 对我有用,谢谢。不得不重新启动 Chrome,最重要的是 **我的证书必须在 2017 年之前过期。** SHA-1 的东西。 (2认同)
  • Chrome 再次改变!现在是“在地址栏中,单击带有 X 的小锁。这将弹出一个小信息屏幕。” 不起作用。 (2认同)

ken*_*orb 89

Linux的

如果您使用的是Linux,也可以按照以下官方维基页面进行操作:

基本上:

  • 单击带有X的锁定图标,
  • 选择证书信息
  • 转到详细信息选项卡
  • 点击导出...(另存为文件)

现在,以下命令将添加证书(其中YOUR_FILE是导出的文件):

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YOUR_FILE -i YOUR_FILE
Run Code Online (Sandbox Code Playgroud)

要列出所有证书,请运行以下命令:

certutil -d sql:$HOME/.pki/nssdb -L
Run Code Online (Sandbox Code Playgroud)

如果它仍然不起作用,您可能会受到此错误的影响: 问题55050:Ubuntu SSL错误8179

PS libnss3-tools在使用上述命令之前,请确保您有.

如果您没有,请通过以下方式安装:

sudo apt-get install libnss3-tools # on Ubuntu
sudo yum install nss-tools # on Fedora, Red Hat, etc.
Run Code Online (Sandbox Code Playgroud)

作为奖励,您可以使用以下方便的脚本:

$ cat add_cert.sh
certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n $1 -i $1
$ cat list_cert.sh
certutil -d sql:$HOME/.pki/nssdb -L # add '-h all' to see all built-in certs
$ cat download_cert.sh
echo QUIT | openssl s_client -connect $1:443 | sed -ne '/BEGIN CERT/,/END CERT/p'
Run Code Online (Sandbox Code Playgroud)

用法:

add_cert.sh [FILE]
list_cert.sh
download_cert.sh [DOMAIN]
Run Code Online (Sandbox Code Playgroud)

故障排除

  • 使用--auto-ssl-client-auth参数运行Chrome

    google-chrome --auto-ssl-client-auth


Bra*_*rks 85

在Mac上,您可以通过执行以下操作在系统级别创建Chrome和Safari完全信任的证书:

    # create a root authority cert
    ./create_root_cert_and_key.sh

    # create a wildcard cert for mysite.com
    ./create_certificate_for_domain.sh mysite.com

    # or create a cert for www.mysite.com, no wildcards
    ./create_certificate_for_domain.sh www.mysite.com www.mysite.com
Run Code Online (Sandbox Code Playgroud)

以上使用以下脚本和支持文件v3.ext,以避免主题备用名称丢失错误

如果要使用自己的root权限创建一个完全受信任的新自签名证书,则可以使用这些脚本执行此操作.

create_root_cert_and_key.sh

    #!/usr/bin/env bash
    openssl genrsa -out rootCA.key 2048
    openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem
Run Code Online (Sandbox Code Playgroud)

create_certificate_for_domain.sh

    #!/usr/bin/env bash

    if [ -z "$1" ]
    then
      echo "Please supply a subdomain to create a certificate for";
      echo "e.g. www.mysite.com"
      exit;
    fi

    if [ ! -f rootCA.pem ]; then
      echo 'Please run "create_root_cert_and_key.sh" first, and try again!'
      exit;
    fi
    if [ ! -f v3.ext ]; then
      echo 'Please download the "v3.ext" file and try again!'
      exit;
    fi

    # Create a new private key if one doesnt exist, or use the xeisting one if it does
    if [ -f device.key ]; then
      KEY_OPT="-key"
    else
      KEY_OPT="-keyout"
    fi

    DOMAIN=$1
    COMMON_NAME=${2:-*.$1}
    SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"
    NUM_OF_DAYS=825
    openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csr
    cat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.ext
    openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days $NUM_OF_DAYS -sha256 -extfile /tmp/__v3.ext 

    # move output files to final filenames
    mv device.csr "$DOMAIN.csr"
    cp device.crt "$DOMAIN.crt"

    # remove temp file
    rm -f device.crt;

    echo 
    echo "###########################################################################"
    echo Done! 
    echo "###########################################################################"
    echo "To use these files on your server, simply copy both $DOMAIN.csr and"
    echo "device.key to your webserver, and use like so (if Apache, for example)"
    echo 
    echo "    SSLCertificateFile    /path_to_your_files/$DOMAIN.crt"
    echo "    SSLCertificateKeyFile /path_to_your_files/device.key"
Run Code Online (Sandbox Code Playgroud)

v3.ext

    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names

    [alt_names]
    DNS.1 = %%DOMAIN%%
Run Code Online (Sandbox Code Playgroud)

还有一个步骤 - 如何在Chrome/Safari中完全信任自签名证书

要允许在Chrome和Safari中完全信任自签名证书,您需要将新的证书颁发机构导入Mac.为此,请遵循这些说明,或在mitmproxy网站上有关此一般过程的更详细说明:

您可以在命令行中执行以下两种方法之一,使用此命令将提示您输入密码:

$ sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain rootCA.pem
Run Code Online (Sandbox Code Playgroud)

或者使用Keychain Access应用程序:

  1. 打开钥匙串访问
  2. 在"钥匙串"列表中选择"系统"
  3. 在"类别"列表中选择"证书"
  4. 选择"文件|导入项目..."
  5. 浏览到上面创建的文件"rootCA.pem",选择它,然后单击"打开"
  6. 在"证书"列表中选择新导入的证书.
  7. 单击"i"按钮,或右键单击您的证书,然后选择"获取信息"
  8. 展开"信任"选项
  9. 将"使用此证书时"更改为"始终信任"
  10. 关闭对话框,系统将提示您输入密码.
  11. 关闭并重新打开正在使用目标域的任何选项卡,它将被安全加载!

作为奖励,如果您需要Java客户端信任证书,您可以通过将证书导入java密钥库来实现.请注意,如果密钥库已经存在,它将从密钥库中删除证书,因为它需要在事情发生变化时进行更新.它当然只对导入的证书执行此操作.

import_certs_in_current_folder_into_java_keystore.sh

KEYSTORE="$(/usr/libexec/java_home)/jre/lib/security/cacerts";

function running_as_root()
{
  if [ "$EUID" -ne 0 ]
    then echo "NO"
    exit
  fi

  echo "YES"
}

function import_certs_to_java_keystore
{
  for crt in *.crt; do 
    echo prepping $crt 
    keytool -delete -storepass changeit -alias alias__${crt} -keystore $KEYSTORE;
    keytool -import -file $crt -storepass changeit -noprompt --alias alias__${crt} -keystore $KEYSTORE
    echo 
  done
}

if [ "$(running_as_root)" == "YES" ]
then
  import_certs_to_java_keystore
else
  echo "This script needs to be run as root!"
fi
Run Code Online (Sandbox Code Playgroud)

  • 想出解决方案(万一其他人点击这个)是将`-key`改为`-keyout` ...`openssl req -new -newkey rsa:2048 -sha256 -nodes -keyout device.key -subj" $ SUBJECT"-out device.csr` (2认同)
  • 为 localhost 执行此操作时,我的计算机上的 Chrome 中仍然出现错误:证书错误站点的证书链存在问题 (net::ERR_CERT_COMMON_NAME_INVALID)。 (2认同)

Lun*_*irl 56

如果您使用的是Mac而没有看到导出选项卡或如何获取证书,这对我有用:

  1. 点击https://之前的锁定
  2. 转到"连接"选项卡
  3. 点击"证书信息"

    现在你应该看到这个: 当然和你的不同信息应该被标记为可信任(否则你可能不会在这里)

  4. 拖动那个小证书图标做你的桌面(或任何地方).

  5. 双击下载的.cer文件,这应该将其导入您的钥匙串并打开Keychain Access到您的证书列表.

    在某些情况下,这已足够,您现在可以刷新页面.

    除此以外:

  6. 双击新添加的证书.
  7. 在信任下拉列表下,将"使用此证书时"选项更改为"始终信任"

现在重新加载有问题的页面,它应该是问题解决了!希望这可以帮助.


沃尔夫编辑

为了使这更容易,您可以使用以下脚本():

  1. 将以下脚本另存为whitelist_ssl_certificate.ssh:

    #!/usr/bin/env bash -e
    
    SERVERNAME=$(echo "$1" | sed -E -e 's/https?:\/\///' -e 's/\/.*//')
    echo "$SERVERNAME"
    
    if [[ "$SERVERNAME" =~ .*\..* ]]; then
        echo "Adding certificate for $SERVERNAME"
        echo -n | openssl s_client -connect $SERVERNAME:443 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' | tee /tmp/$SERVERNAME.cert
        sudo security add-trusted-cert -d -r trustRoot -k "/Library/Keychains/System.keychain" /tmp/$SERVERNAME.cert
    else
        echo "Usage: $0 www.site.name"
        echo "http:// and such will be stripped automatically"
    fi
    
    Run Code Online (Sandbox Code Playgroud)
  2. 使脚本可执行(从shell):

    chmod +x whitelist_ssl_certificate.ssh
    
    Run Code Online (Sandbox Code Playgroud)
  3. 运行所需域的脚本(只需复制/粘贴完整的URL工作):

    ./whitelist_ssl_certificate.ssh https://your_website/whatever
    
    Run Code Online (Sandbox Code Playgroud)


Ram*_*man 43

更新于 4月3/2018

由Chromium团队推荐

https://www.chromium.org/Home/chromium-security/deprecating-powerful-features-on-insecure-origins#TOC-Testing-Powerful-Features

快速超级简易解决方案

有一个秘密旁路短语,可以输入错误页面,让Chrome继续运行,尽管存在安全错误:thisisunsafe(在早期版本的Chrome中,键入badidea,甚至更早,危险).DO NOT USE,除非你明白究竟为什么需要它!

资源:

https://chromium.googlesource.com/chromium/src/+/d8fc089b62cd4f8d907acff6fb3f5ff58f168697%5E%21/

(注意window.atob('dGhpc2lzdW5zYWZl')解决thisisunsafe)

最新版本的源代码是@ https://chromium.googlesource.com/chromium/src/+/refs/heads/master/components/security_interstitials/core/browser/resources/interstitial_large.js,该window.atob功能可以在一个JS控制台.

有关Chrome团队为何更改旁路短语(第一次)的背景知识:

https://bugs.chromium.org/p/chromium/issues/detail?id=581189

如果一切都失败了

如果没有"Proceed Anyway"选项,并且旁路短语不起作用,那么对于快速的一次性,这个hack工作正常:

  1. localhost通过启用此标记允许证书错误(注意Chrome更改标志值后需要重新启动):

    chrome://flags/#allow-insecure-localhost

    (并通过@Chris 投票回答/sf/answers/2233014731/)

  2. 如果您要连接的网站是localhost,那么您就完成了.否则,设置TCP隧道以在本地侦听端口8090并连接到broken-remote-site.com端口443,确保已socat在终端窗口中安装并运行类似这样的内容:

    socat tcp-listen:8090,reuseaddr,fork tcp:broken-remote-site.com:443

  3. 在浏览器中转到https:// localhost:8090.

  • 如https://www.quora.com/How-do-you-fix-the-privacy-error-in-Chrome-Your-connection-is-not-private所述,另一个选项是点击页面上的任意位置写下"badidea" (8认同)

小智 34

对于测试环境

您可以--ignore-certificate-errors在启动chrome时使用命令行参数(在Ubuntu上使用版本28.0.1500.52).

这将导致它忽略错误并在没有警告的情况下连接.如果您已经运行了chrome版本,则需要在从命令行重新启动之前关闭它,否则它将打开一个新窗口但忽略这些参数.

我将Intellij配置为在进行调试时以这种方式启动chrome,因为测试服务器永远不会有有效的证书.

我不建议这样的正常浏览,因为证书检查是一个重要的安全功能,但这可能对某些人有所帮助.

  • 它在Windows 8中对我有用!我刚刚点击了Chrome快捷方式>属性>更改了'目标'字段(请注意'--ignore-certificate-errors'应该在引用后添加,并带有空格):"C:\ Program Files(x86)\ Google\Chrome\Application\chrome.exe"--ignore-certificate-errors (5认同)

小智 19

有人注意到,您需要重新启动所有Chrome,而不仅仅是浏览器窗口.最快的方法是打开一个选项卡...

chrome://restart


UUH*_*IVS 18

WINDOWS JUN/2017 Windows Server 2012

我跟着@Brad Parks的回答.在Windows上,您应该在受信任的根证书颁发机构存储中导入rootCA.pem.

我做了以下步骤:

openssl genrsa -out rootCA.key 4096
openssl req -x509 -new -nodes -key rootCA.key -newkey rsa:4096 -sha256 -days 1024 -out rootCA.pem
openssl req -new -newkey rsa:4096 -sha256 -nodes -keyout device.key -out device.csr
openssl x509 -req -in device.csr -CA rootCA.pem -CAkey rootCA.key -CAcreateserial -out device.crt -days 2000 -sha256 -extfile v3.ext
Run Code Online (Sandbox Code Playgroud)

其中v3.ext是:

authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
subjectAltName = @alt_names

[alt_names]
DNS.1 = localhost
IP.1 = 192.168.0.2
IP.2 = 127.0.0.1
Run Code Online (Sandbox Code Playgroud)

然后,在我的情况下,我有一个自托管的Web应用程序,所以我需要绑定证书与IP地址和端口,证书应该在我的商店与私人密钥信息,所以我导出到pfx格式.

openssl pkcs12 -export -out device.pfx -inkey device.key -in device.crt
Run Code Online (Sandbox Code Playgroud)

使用mmc控制台(文件/添加或删除管理单元/证书/添加/计算帐户/本地计算机/确定)我在个人存储中导入了pfx文件.

后来我用这个命令绑定证书(你也可以使用HttpConfig工具):

netsh http add sslcert ipport=0.0.0.0:12345 certhash=b02de34cfe609bf14efd5c2b9be72a6cb6d6fe54 appid={BAD76723-BF4D-497F-A8FE-F0E28D3052F4}
Run Code Online (Sandbox Code Playgroud)

certhash =证书Thumprint

appid = GUID(您的选择)

首先,我尝试以不同的方式在受信任的根证书颁发机构上导入证书"device.crt",但我仍然得到相同的错误:

在此输入图像描述

但我意识到我应该导入root权限证书而不是域名证书.所以我使用了mmc控制台(文件/添加或删除管理单元/证书/添加/计算帐户/本地计算机/确定)我在受信任的根证书颁发机构存储中导入了rootCA.pem.

在此输入图像描述

重启Chrome和etvoilà它有效.

使用localhost:

在此输入图像描述

或者使用IP地址:

在此输入图像描述

我唯一无法实现的是,它有过时的密码(图片上的红色方块).在这一点上,对此表示赞赏.

使用makecert,无法添加SAN信息.使用New-SelfSignedCertificate(Powershell),您可以添加SAN信息,它也可以.

  • 重要说明:以管理员身份运行OpenSSL. (2认同)

Ari*_*iel 17

  1. 在受信任的根 CA 存储中添加 CA 证书。

  2. 转到 chrome 并启用此标志!

chrome://flags/#allow-insecure-localhost

最后,只需使用 *.me 域或任何有效域,如 *.com 和 *.net,并将它们维护在主机文件中。对于我的本地开发人员,我使用 *.me 或 *.com 以及维护如下的主机文件:

  1. 添加到主机。C:/windows/system32/drivers/etc/hosts

    127.0.0.1 nextwebapp.me

注意:如果执行此操作时浏览器已经打开,错误将继续显示。所以,请关闭浏览器并重新开始。更好的是,隐身或开始新会话以立即生效。


Ira*_*ney 13

您确定该网站的地址与证书相同吗?我在使用Chrome和自签名证书方面遇到了同样的问题,但最后我发现它对证书上域名的验证非常挑剔(应该是这样).

Chrome没有自己的证书商店,并使用Window自己的.但是,Chrome无法将证书导入商店,因此您应该通过IE添加它们.

在Google Chrome中安装证书

在Internet Explorer中安装证书

另外,请看一下创建自签名证书的几种不同方法(我假设您正在使用IIS,因为您没有提到过).

如何在IIS 7中创建自签名证书


小智 8

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

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


Vin*_*hop 7

这对我有用。请参阅:http : //www.robpeck.com/2010/10/google-chrome-mac-os-x-and-self-signed-ssl-certificates/#.Vcy8_ZNVhBc

在地址栏中,单击带有 X 的小锁。这将显示一个小信息屏幕。单击显示“证书信息”的按钮。

单击并将图像拖动到桌面。它看起来像一个小证书。

双击它。这将打开钥匙串访问实用程序。输入您的密码以解锁它。

确保将证书添加到系统钥匙串,而不是登录钥匙串。单击“始终信任”,即使这似乎没有任何作用。

添加后,双击它。您可能需要再次进行身份验证。

展开“信任”部分。

“使用此证书时”设置为“始终信任”


Jam*_*vec 7

我开始使用bjnord建议的过程: Google Chrome,Mac OS X和自签名SSL证书

博客中显示的内容不起作用.

但是,该博客的评论之一是黄金:

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

您需要关注如何获取证书文件的博客,之后您可以使用上面的命令并且应该很好.


Tet*_*Dev 7

我无法在Linux上的Chromium上管理SSL证书的GUI正常工作。但是,他们的文档给出了正确的答案。技巧是运行下面的命令以导入自签名SSL证书。刚刚更新的名称<certificate-nickname>certificate-filename.cer,然后重新启动铬/铬。

从文档中:

在Linux上,Chromium使用NSS共享数据库。如果内置管理器对您不起作用,则可以使用NSS命令行工具配置证书。

获取工具

  • Debian / Ubuntu: sudo apt-get install libnss3-tools

  • 软呢帽: su -c "yum install nss-tools"

  • Gentoo :(su -c "echo 'dev-libs/nss utils' >> /etc/portage/package.use && emerge dev-libs/nss"您需要启动以下所有带有nss前缀的命令,例如nsscertutil。)Opensuse:sudo zypper install mozilla-nss-tools

要信任自签名服务器证书,我们应该使用

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <certificate-nickname> -i certificate-filename.cer

列出所有证书

certutil -d sql:$HOME/.pki/nssdb -L

TRUSTARGS是三个零个或多个字母字符的字符串,用逗号分隔。它们定义了应该如何信任SSL,电子邮件和对象签名的证书,并在certutil文档或Meena关于信任标志的博客文章中进行了说明。

添加用于SSL客户端身份验证的个人证书和私钥使用命令:

pk12util -d sql:$HOME/.pki/nssdb -i PKCS12_file.p12

导入存储在PKCS#12文件中的个人证书和私钥。个人证书的TRUSTARGS将设置为“ u,u,u”。

删除证书 certutil -d sql:$HOME/.pki/nssdb -D -n <certificate nickname>

摘录自: https : //chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md


use*_*751 7

截至 2020 年 3 月,在使用 Chrome 81 的 MacOS Catalina 上,一旦您使用如上所述的 openssl 创建有效证书,这种情况就会发生变化。

首先,我使用 Safari 浏览了我的站点,然后单击了警告页面底部的链接,该链接允许我无论如何都可以访问该站点。这将证书添加到我的 Mac 钥匙串(即 Keychain.app)。Safari 然后会让我查看页面。Chrome 显示该证书受信任,但不允许我查看该页面。我继续收到 CERTIFICATE_INVALID 错误。

在钥匙串中,选择左下角窗格中的所有项目。然后搜索您的本地主机 DNS 名称(即 myhost.example.com)。

双击您的证书。它将为您的证书打开一个编辑对话框。

将“使用此证书时”更改为“始终信任”

这完全违反直觉,因为 SSL 已经设置为 Always Trust,大概是在添加证书时由 Safari 设置的。Chrome 仅在我将其全局更改为 Always Trust 后才开始工作。当我把它改回来时,它停止工作。


ors*_*zky 7

2021 年 6 月 - Windows 10 - Chrome v91(简单)

按照selfsignedcertificate.com的证书生成说明进行操作:

域名示例:mydomain.local,将其替换为您的域名。

  1. 生成密钥:

    openssl genrsa -out mydomain.local.key 2048
    
    Run Code Online (Sandbox Code Playgroud)
  2. mydomain.local.conf创建仅包含以下内容的配置文件:

    [req]
    distinguished_name=req
    [SAN]
    subjectAltName=DNS:mydomain.local
    
    Run Code Online (Sandbox Code Playgroud)

    注意:在 subcjectAltName 中,您可以定义更多域(可选),例如:

    subjectAltName=DNS:mydomain.local, DNS:*.mydomain.local, DNS:otherdomain.local, IP:192.168.1.10

  3. 创建证书:

    [req]
    distinguished_name=req
    [SAN]
    subjectAltName=DNS:mydomain.local
    
    Run Code Online (Sandbox Code Playgroud)
  4. 将证书添加到受信任的根证书颁发机构

    • 右键单击 mydomain.local.crt 文件
    • Install Certificate从上下文菜单中选择。
    • Local Machine在弹出窗口中选择。
    • 选择Place all certificates in the following store
    • 点击Browse
    • 选择Trusted Root Certification Authorities
    • 点击OkNextFinish
    • 重新启动 Chrome。


Der*_*ler 6

单击URL旁边的小划线锁图标时,您将看到如下所示的框:

在此输入图像描述

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

在此输入图像描述

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

您可以使用其他答案中列出的方法之一将证书添加到该商店或使用:

certutil -addstore -user "ROOT" cert.pem
Run Code Online (Sandbox Code Playgroud)
  • ROOT 是前面提到的证书存储的内部名称.
  • cert.pem 是您自签名证书的名称.


小智 6

修复 Windows 上的 Chrome。

首先,您需要导出证书。

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

导入

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

  • 它对我不起作用,https://imgur.com/a/xoqXaHD Win 10,chrome 78。 (2认同)

Log*_*gan 6

这篇文章已经充满了回复,但我根据其他一些答案创建了一个bash脚本,以便更容易生成在Chrome中有效的自签名TLS证书(已测试Chrome 65.x).希望它对其他人有用.

self-signed-tls bash脚本

安装(并信任)证书后,不要忘记重启Chrome(chrome://restart)


值得一试的另一个工具是CloudFlare的cfssl工具包:

cfssl


Aly*_*ali 6

对于 MacOS 上的 Chrome,如果您已准备好证书:

  • 退出 Chrome ( cmd+ Q)。
  • 启动钥匙串访问应用程序并打开“证书”类别。
  • 将您的证书文件拖到“钥匙串访问”窗口并键入证书文件的密码。
  • 双击您的证书并展开“信任”列表。
    • 在“使用此证书时”行中,选择“始终信任”。
    • 关闭这个东西并输入你的密码。
  • 启动 Chrome 并清除所有缓存。
  • 检查一切是否正常。


小智 5

这是不断出现的东西——尤其是对于 Mac OS X Yosemite 上的 Google Chrome!

值得庆幸的是,我们的开发团队之一今天向我发送了此链接,该方法运行可靠,同时仍允许您控制接受证书的站点。

https://www.reddit.com/r/sysadmin/comments/3ercx4/chrome_shortcut_past_the_your_connection_is_not/cthporl

jersully 帖子:

如果您不想打扰内部证书...

  1. 输入chrome://flags/在地址栏中。
  2. 滚动到或搜索记住决定以在指定的时间长度内处理 SSL 错误。
  3. 选择记住三个月。

  • 选项在 49.0.2623.112m Windows 中不可用 (7认同)

小智 5

mac/osx 上的 SSL/HTTPS 本地主机修复:

  1. 尝试打开 https localhost 环境时,单击地址栏中带有十字的红色锁。将打开一个窗口,其中包含有关证书的一些信息。

  2. 点击“详情” 信息窗口

  3. chrome 开发人员工具在“安全”选项卡上打开。单击查看证书证书图片
  4. 将它添加到您的“系统”钥匙串(不是默认选择的“登录”钥匙串)。

  5. (再次)打开您的钥匙串并找到证书。单击它并确保您“信任”所有人。

  6. 重新启动chrome,它应该可以工作。


Hug*_*ood 5

我遇到了同样的问题:我已将证书安装到 Windows 的受信任的根授权商店中,但 Chrome 仍然拒绝该证书,并出现错误ERR_CERT_COMMON_NAME_INVALID. 请注意,当证书未正确安装在商店中时,错误为ERR_CERT_AUTHORITY_INVALID.

正如错误名称、此评论此问题所暗示的那样,问题出在证书中声明的域名上。当在生成证书时提示输入“通用名称”时,我必须输入用于访问站点的域名localhost在我的情况下)。我使用重新启动了 Chrome chrome://restart,它终于对这个新证书感到满意。


Adr*_*osa 5

从Chrome 58+开始,由于缺少SAN,我开始在macOS上收到证书错误。这是重新获得地址栏绿色锁定的方法。

  1. 使用以下命令生成新证书:

    openssl req \
      -newkey rsa:2048 \
      -x509 \
      -nodes \
      -keyout server.key \
      -new \
      -out server.crt \
      -subj /CN=*.domain.dev \
      -reqexts SAN \
      -extensions SAN \
      -config <(cat /System/Library/OpenSSL/openssl.cnf \
          <(printf '[SAN]\nsubjectAltName=DNS:*.domain.dev')) \
      -sha256 \
      -days 720
    
    Run Code Online (Sandbox Code Playgroud)
  2. 将导入server.crt到您的KeyChain中,然后双击证书,展开Trust,然后选择Always Trust

在Google Chrome浏览器中刷新页面https://domain.dev,这样绿色的锁又回来了。


小智 5

我自己解决了这个问题,而没有更改任何具有正确 SSL 认证的浏览器上的设置。我使用的是 mac,因此它需要对我的 ssl 认证进行钥匙串更新。我必须将主题替代名称添加到 chrome 的 ssl 认证中才能接受它。截至今天,这是 Chrome 版本号:62.0.3202.94

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

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

配置文件

[ 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
Run Code Online (Sandbox Code Playgroud)

运行命令创建证书:

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'
Run Code Online (Sandbox Code Playgroud)

对于macs只添加可信认证(必填):

sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain ./certificate.pem
Run Code Online (Sandbox Code Playgroud)

对于 Windows,您必须找到如何在本地独立验证我们的 ssl 证书。我不使用 Windows。对不起 windows 伙计们和 gals。

我正在使用带有 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);
Run Code Online (Sandbox Code Playgroud)

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

下面是在 Node.js 服务器上为 Mac 用户运行https://localhost的示例:

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

快乐编码!


Fod*_*ort 5

当我尝试在浏览器中导入证书时,它对我不起作用......在 chrome 中打开开发人员工具 > 安全性,然后选择查看证书。单击详细信息选项卡并将其导出。

// Linux

sudo apt-get install libnss3-tools 

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n [EXPORTED_FILE_PATH] -i [EXPORTED_FILE_PATH]
Run Code Online (Sandbox Code Playgroud)

运行此命令,如果您看到您刚刚导入的文件,您就可以开始了!

 certutil -d sql:$HOME/.pki/nssdb -L
Run Code Online (Sandbox Code Playgroud)

// 窗户

Start => run => certmgr.msc
Run Code Online (Sandbox Code Playgroud)

在左侧选择受信任的根证书颁发机构 => 个人。单击操作选项卡 => 所有操作/导入,然后选择您之前从浏览器导出的文件

别忘了重启chrome!!!

祝你好运!;)


Han*_*yer 5

我尝试了所有方法以及使它起作用的原因:导入时,选择正确的类别,即“ 受信任的根证书颁发机构”

(对不起,它是德国人,但请按照图片进行操作)

在此处输入图片说明


Ale*_*yuv 5

mkdir CA
openssl genrsa -aes256 -out CA/rootCA.key 4096
openssl req -x509 -new -nodes -key CA/rootCA.key -sha256 -days 1024 -out CA/rootCA.crt

openssl req -new -nodes -keyout example.com.key -out domain.csr -days 3650 -subj "/C=US/L=Some/O=Acme, Inc./CN=example.com"
openssl x509 -req -days 3650 -sha256 -in domain.csr -CA CA/rootCA.crt -CAkey CA/rootCA.key -CAcreateserial -out example.com.crt -extensions v3_ca -extfile <(
cat <<-EOF
[ v3_ca ]
subjectAltName = DNS:example.com
EOF
)
Run Code Online (Sandbox Code Playgroud)


Ray*_*oss 5

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

这是它接受的自签名CA证书。这是我发现可以解决问题的唯一方法,我花cert_authority_invalid了好几个小时试图让它接受自签名的终点证书,没有雪茄。只要声明了,UI就会接受自签名的权限CA:TRUE。之后,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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

如果那不起作用:

  • chrome://restart 实际重启

  • 尝试使用firefox获取有关该错误的更多详细信息,它倾向于更好地解释错误...虽然chrome会说ERR_CERTIFICATE_INVALID,但firefox会抛出:MOZILLA_PKIX_ERROR_CA_CERT_USED_AS_END_ENTITY。

  • 请记住,chrome现在需要主题备用名称,并且几乎忽略了CN。

为他人:

  • certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <nickname> -i <my.crt> //对于服务器证书

  • certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n <nickname> -i <my.crt>适用于CA的https://blogs.oracle.com/meena/about-trust-flags-of-certificates-in-nss-database-that-c​​an-be-be-can-modified-by-certutil

  • 对于Firefox,添加例外证书的UI确实可以工作,一旦您这样做,它将信任它。

  • 也许您有一些时髦的设置/etc/pki/tls/openssl.cnf可以与您的配置合并。

  • 也许您没有在配置或命令行中添加扩展名,例如v3_req

  • 请注意,我的方法通过仅使用授权密钥对证书签名并添加开发服务器的详细信息来绕过CSR的需要。CSR允许更多的密钥以实现实际的安全性。

  • 我尝试了所有操作,但是chrome需要具有基本约束CA:true设置的权限。服务器证书必须全部由有效的授权机构签发……即使那只是用CA:true自己签名的另一个证书。


mpo*_*rie 5

要在Windows中创建Chrome v58及更高版本将信任的自签名证书,请以提升的特权启动Powershell并输入:

New-SelfSignedCertificate -CertStoreLocation Cert:\LocalMachine\My -Subject "fruity.local" -DnsName "fruity.local", "*.fruity.local" -FriendlyName "FruityCert" -NotAfter (Get-Date).AddYears(10)
#notes: 
#    -subject "*.fruity.local" = Sets the string subject name to the wildcard *.fruity.local
#    -DnsName "fruity.local", "*.fruity.local"
#         ^ Sets the subject alternative name to fruity.local, *.fruity.local. (Required by Chrome v58 and later)
#    -NotAfter (Get-Date).AddYears(10) = make the certificate last 10 years. Note: only works from Windows Server 2016 / Windows 10 onwards!!
Run Code Online (Sandbox Code Playgroud)

完成此操作后,证书将被保存到“ 个人\证书”存储下的“本地计算机”证书中。

您要将此证书复制到“ 受信任的根证书颁发机构\证书”存储。

一种方法是:单击Windows“开始”按钮,然后键入certlm.msc。然后,根据以下屏幕截图,将新创建的证书拖放到“ 受信任的根证书颁发机构\证书”存储中。 在此处输入图片说明


Mic*_*ael 5

Filippo Valsorda编写了一个跨平台工具,mkcert用于许多信托商店。我想他之所以写它,是由于这个问题有很多答案的原因:对由受信任的根CA签名的SubjectAltName证书执行“正确”的事情很痛苦。

mkcert Windows,macOS和几种Linux版本的主要程序包管理系统中都包含该程序。

证书

mkcert是制作本地信任的开发证书的简单工具。它不需要任何配置。

$ mkcert -install
Created a new local CA at "/Users/filippo/Library/Application Support/mkcert" 
The local CA is now installed in the system trust store! ??
The local CA is now installed in the Firefox trust store (requires browser restart)! 

$ mkcert example.com "*.example.com" example.test localhost 127.0.0.1 ::1
Using the local CA at "/Users/filippo/Library/Application Support/mkcert" ?

Created a new certificate valid for the following names 
 - "example.com"
 - "*.example.com"
 - "example.test"
 - "localhost"
 - "127.0.0.1"
 - "::1"

The certificate is at "./example.com+5.pem" and the key at "./example.com+5-key.pem" ?
Run Code Online (Sandbox Code Playgroud)


Val*_*kov 5

这里我的WINDOWS解决方案可能适用于 LINUX

Git 有 openssl

C:\Program Files\Git\usr\bin\openssl.exe。

导航到 C:\Program Files\Git\usr\bin\ 但最好添加到 PATH

为证书创建一个文件夹
创建一个文件 req.cnf
更改像我公司一样的值
不要删除
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost
Chrome 抱怨

C = CA
CA 是两个字母的国家/地区代码 CA=加拿大、美国...
ST = ON 是省份 ON = 安大略省

请求.cnf

[req]
distinguished_name = req_distinguished_name
x509_extensions = v3_req
prompt = no
[req_distinguished_name]
C = CA
ST = ON
L = Toronto
O = MyCompany
OU = MyDivision
CN = localhost
[v3_req]
keyUsage = critical, digitalSignature, keyAgreement
extendedKeyUsage = serverAuth
subjectAltName = @alt_names
[alt_names]
DNS.1 = localhost 
DNS.2 = www.mydomainname.com
DNS.3 = mydomainname.com
Run Code Online (Sandbox Code Playgroud)

在CMD中创建证书

 openssl req -x509 -nodes -days 365 -newkey rsa:2048  -keyout server.key -out server.crt -config req.cnf -sha256

 cat server.crt server.key > server.pem
Run Code Online (Sandbox Code Playgroud)

覆盖开发者证书

 yourproject\node_modules\webpack-dev-server\ssl   with the **server.pem**
Run Code Online (Sandbox Code Playgroud)

在 chrome 设置 -> 管理证书中

server.crt导入受信任的证书授权 重新启动 chrome

package.json中

 "scripts": {
    "start": "set HTTPS=true&&react-scripts start",
Run Code Online (Sandbox Code Playgroud)


N. *_*Raj 5

我刚刚allow-insecure-localhost在 Chrome 中启用了标志,仅此而已。

脚步。

  1. 输入chrome://flags您的 chrome 选项卡。
  2. 搜索allow-insecure-localhost标志并启用它。
  3. 重新启动 Chrome 浏览器。

现在您将不会看到 https://localhost 站点的不安全警告。


归档时间:

查看次数:

1070106 次

最近记录:

6 年 前