让Chrome接受自签名的localhost证书

时间:2011-09-28 08:41:51

标签: google-chrome ssl certificate self-signed

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

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

48 个答案:

答案 0 :(得分:540)

仅适用于localhost

只需将其粘贴到您的Chrome中即可:

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

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

点击Enable

答案 1 :(得分:465)

这对我有用:

  1. 使用Chrome,通过HTTPS点击服务器上的页面并继续浏览红色警告页面(假设您尚未执行此操作)。
  2. 打开Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates
  3. 点击Authorities标签,然后向下滚动,在您为证书提供的组织名称下找到您的证书。
  4. 选择它,点击修改(注意:在最近版本的Chrome中,该按钮现在为“高级”而非“编辑”),选中所有复选框并单击确定。您可能需要重新启动Chrome。
  5. 你现在应该在页面上获得漂亮的绿色锁定。

    编辑:我在新计算机上再次尝试此操作,只需从红色不受信任的证书页继续,证书就不会出现在“管理证书”窗口中。我必须做以下事情:

    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。

答案 2 :(得分:203)

2020-05-22 :仅使用 5 openssl条命令,即可完成此操作。

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

使用以下代码,您可以(1)成为自己的CA,(2)然后将SSL证书签名为CA。 (3)然后将CA证书(而不是SSL证书,该证书到您的服务器上)导入Chrome / Chromium。 (是的,即使在Linux上也可以。)

######################
# 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

回顾:

  1. 成为CA
  2. 使用您的CA cert +密钥签署证书
  3. 在您的Chrome设置(设置>管理证书>授权>导入)中将myCA.pem导入为授权
  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

答案 3 :(得分:130)

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

Google Chrome, Mac OS X and Self-Signed SSL Certificates

基本上:

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

答案 4 :(得分:128)

更新58+更新(发布于2017-04-19)

自Chrome 58起,仅使用commonName is being removed标识主机。请参阅discussion herebug tracker here。过去,subjectAltName仅用于多主机证书,因此某些内部CA工具可能不包含它们。

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

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

对于openssl,这意味着your OpenSSL config(Ubuntu上的/etc/ssl/openssl.cnf)对于单个主机应该具有类似的内容:

[v3_ca]   # and/or [v3_req], if you are generating a CSR
subjectAltName = DNS:example.com

或多个主机:

[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

在Chrome的证书查看器中(已移至&#34;安全&#34; F12下的标签页),您应该会在Extensions下将其列为Certificate Subject Alternative Name

Chrome cert viewer

答案 5 :(得分:91)

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

thisisunsafe”是Chrome版本65的BYPASS_SEQUENCE

badidea”Chrome版本62 - 64.

danger”曾用于早期版本的Chrome

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

我在Mac High Sierra上尝试过它。

要仔细检查是否再次更改,请转到最新的铬Source Code

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

var BYPASS_SEQUENCE = window.atob('dGhpc2lzdW5zYWZl');

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

console.log(window.atob('dGhpc2lzdW5zYWZl'));

答案 6 :(得分:90)

  

更新11月11日:此回答可能不适用于大多数较新版本的Chrome。

     

更新02/2016:可以找到更好的Mac用户说明Here

  1. 在您要添加的网站上,右键点击地址栏中的红色锁图标:enter image description here

    1. 点击标有连接的标签,然后点击证书信息

    2. 点击详细信息标签,点击按钮复制到文件... 。这将打开证书导出向导,单击下一步以转到导出文件格式屏幕。

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

    4. 点击浏览... ,然后将文件保存到您的计算机。将其命名为描述性的。点击下一步,然后点击完成

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

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

    7. 点击受信任的根证书颁发机构标签,然后点击导入... 按钮。这将打开“证书导入向导”。点击下一步以转到要导入的文件屏幕。

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

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

    10. 点击安全警告

    11. 重新启动Chrome。

答案 7 :(得分:88)

的Linux

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

基本上:

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

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

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n YOUR_FILE -i YOUR_FILE

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

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

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

P.S。在使用上述命令之前,请确保您拥有libnss3-tools

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

sudo apt-get install libnss3-tools # on Ubuntu
sudo yum install nss-tools # on Fedora, Red Hat, etc.

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

$ 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'

用法:

add_cert.sh [FILE]
list_cert.sh
download_cert.sh [DOMAIN]

疑难解答

  • 使用--auto-ssl-client-auth参数

    运行Chrome

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

答案 8 :(得分:73)

在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

以上使用以下脚本和支持文件v3.extavoid subject alternative name missing errors

如果要使用自己的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

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=999
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"

v3.ext

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

[alt_names]
DNS.1 = %%DOMAIN%%

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

要允许在Chrome和Safari中完全信任自签名证书,您需要将新的证书颁发机构导入Mac。为此,请按照这些说明或此常规流程的更详细说明on the mitmproxy website

进行操作

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

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

或使用Keychain Access app:

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

答案 9 :(得分:56)

如果您在Mac上 并且没有看到导出标签或如何获取证书,这对我有效:

  1. 点击https://
  2. 之前的锁定
  3. 转到“连接”标签
  4. 点击“证书信息”

    现在你应该看到这个: Different information of course and yours should be marked as trusted yet (otherwise      you probably wouldn't be here)

  5. 将小证书图标拖到桌面上(或任何地方)。

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

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

    否则:

  7. 双击新添加的证书。
  8. 在信任下拉列表下,将“使用此证书时”选项更改为“始终信任”
  9. 现在重新加载有问题的页面,它应该是问题解决了!希望这会有所帮助。


    Wolph

    进行编辑

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

    1. 将以下script保存为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
      
    2. 使脚本可执行(来自shell):

      chmod +x whitelist_ssl_certificate.ssh
      
    3. 运行所需域名的脚本(只需复制/粘贴完整的网址):

      ./whitelist_ssl_certificate.ssh https://your_website/whatever
      

答案 10 :(得分:39)

更新 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 使用此功能,除非您完全理解为什么需要它!

来源:

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.jswindow.atob函数可以在JS控制台中执行。

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

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

如果一切都失败

如果没有“Proceed Anyway”选项,并且旁路短语不起作用,那么对于快速的一次性操作,这个黑客很有效:

  1. 启用此标记,允许来自localhost的证书错误(请注意,更改标记值后Chrome需要重新启动):

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

    (@Chris投票回复https://stackoverflow.com/a/31900210/430128

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

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

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

答案 11 :(得分:34)

对于测试环境

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

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

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

我不推荐像这样的正常浏览,因为证书检查是一项重要的安全功能,但这可能对某些人有所帮助。

答案 12 :(得分:18)

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

chrome://restart

答案 13 :(得分:17)

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

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

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

openssl pkcs12 -export -out device.pfx -inkey device.key -in device.crt

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

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

netsh http add sslcert ipport=0.0.0.0:12345 certhash=b02de34cfe609bf14efd5c2b9be72a6cb6d6fe54 appid={BAD76723-BF4D-497F-A8FE-F0E28D3052F4}

certhash =证书Thumprint

appid = GUID(您的选择)

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

enter image description here

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

enter image description here

重启Chrome和etvoilà它有效。

使用localhost:

enter image description here

或使用IP地址:

enter image description here

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

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

答案 14 :(得分:11)

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

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

Installing Certificates in Google Chrome

Installing Certificates in Internet Explorer

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

How to Create a Self Signed Certificate in IIS 7

答案 15 :(得分:7)

点击网址旁边的小划线锁图标时,您会看到一个如下所示的框:

enter image description here

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

enter image description here

它会告诉您哪个证书库是正确的,它是受信任的根证书颁发机构商店。

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

certutil -addstore -user "ROOT" cert.pem
  • ROOT是前面提到的证书存储的内部名称。
  • cert.pem是您自签名证书的名称。

答案 16 :(得分:6)

我开始使用bjnord建议的过程: Google Chrome, Mac OS X and Self-Signed SSL Certificates

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

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

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

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

答案 17 :(得分:5)

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

从文档中

  

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

     

获取工具

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

  •   
  • Fedora: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

答案 18 :(得分:5)

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

  

self-signed-tls bash script

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

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

  

cfssl

答案 19 :(得分:5)

Filippo Valsorda编写了一个跨平台工具mkcert,用于lots的信任库。我认为他之所以写它,是因为这个问题有很多答案:对受信任的根CA签名的SubjectAltName证书做“正确”的事情很痛苦。

mkcert包含在Windows,macOS和几种Linux版本的主要软件包管理系统中。

  

mkcert

     

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" ✅

答案 20 :(得分:5)

从2020年3月开始,在使用Chrome 81的MacOS Catalina上,一旦您如上所述使用openssl创建有效证书,这种情况就会改变。

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

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

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

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

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

答案 21 :(得分:4)

我尝试了所有内容以及它的工作原理:导入时,选择正确的类别,即受信任的根证书颁发机构

(对不起,德国人,但只是按照图片)

enter image description here

答案 22 :(得分:4)

自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
    
  2. server.crt导入您的KeyChain,然后双击证书,展开信任,然后选择始终信任

  3. 在Google Chrome中刷新页面https://domain.dev,以便绿色锁定回来。

答案 23 :(得分:3)

当我尝试在浏览器中导入证书时,它对我没有用... 在chrome open Developer Tools&gt;安全性,然后选择查看证书。 单击“详细信息”选项卡并将其导出。

// LINUX

sudo apt-get install libnss3-tools 

certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n [EXPORTED_FILE_PATH] -i [EXPORTED_FILE_PATH]

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

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

// Windows

Start => run => certmgr.msc

在左侧选择受信任的根证书颁发机构=&gt;个人。 点击操作标签=&gt;然后,所有操作/导入都会从浏览器中选择您之前导出的文件

别忘了重启chrome !!!

好运,祝你好运! ;)

答案 24 :(得分:3)

2017-06-27最新方法:

openssl req \
    -newkey rsa:2048 \
    -x509 \
    -nodes \
    -keyout yoursite.key \
    -new \
    -out yoursite.crt \
    -subj /CN=yoursite.dev \
    -reqexts SAN \
    -extensions SAN \
    -config <(cat /System/Library/OpenSSL/openssl.cnf \
        <(printf '[SAN]\nsubjectAltName=DNS:yoursite.dev')) \
    -sha256 \
    -days 3650

然后,将yoursite.crt和yoursite.key添加到你的nginx conf。

来自:https://github.com/webpack/webpack-dev-server/issues/854

答案 25 :(得分:3)

这种情况不断出现 - 特别是对于Mac OS X Yosemite上的谷歌浏览器!

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

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

jersully帖子:

  

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

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

答案 26 :(得分:3)

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

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

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

双击它。这将打开Keychain Access实用程序。输入您的密码以解锁。

确保将证书添加到系统密钥链,而不是登录密钥链。点击&#34;始终信任,&#34;即使这似乎没有做任何事情。

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

扩展&#34;信任&#34;部分。

&#34;使用此证书时,&#34;设置为&#34;始终信任&#34;

答案 27 :(得分:2)

  

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

您应该使用;

创建PKI

1)自签名根CA.
2)子/中间证书[由根CA签名]。
3)普通/终端实体证书[由根CA或子CA签署]    (commonName或subjectAltName(SAN)as localhost)    (还包括https://localhost/作为SAN中的URI)。
4)在您的Windows操作系统中导入/安装Root CA(因为您提到IE。谷歌浏览器在查找证书链时使用相同的资源 - https://www.chromium.org/Home/chromium-security/root-ca-policy)作为“受信任的根证书颁发机构& #39 ;.
5)将该终端实体证书安装为您的Web服务器证书,并停止抱怨该错误消息。

希望这有帮助。

答案 28 :(得分:2)

我不得不在macosx上调整Chrome启动器并添加到脚本下方。 保存如下;

  

/ Applications / Google \ Chrome.app/Contents/MacOS/Chrome.command

#!/bin/sh
RealBin="Google Chrome"
AppDir="$(dirname "$0")"
exec "$AppDir/$RealBin" --ignore-certificate-errors "$@"

当我使用此脚本启动Chrome时,自签名证书可以正常运行。但是不使用使用此脚本启动的浏览器浏览网页您将不会收到有关无效证书的警告!

答案 29 :(得分:2)

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

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

答案 30 :(得分:2)

对于Fedora和Ubuntu,如果使用gui添加证书来添加新的根权限,则出现example.com Not a Certification authority错误。

尝试使用从chrome导出的证书进行以下操作,可以使用任何格式(base64链/单,pkcs 7,der二进制文件等)。当所有gui方法都失败了时,这对我有用。

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

要查看更改,请重新启动chrome,如有必要,请从后台将其杀死。 Firefox仍然会抱怨。

如果以后需要删除它,请转到Chrome->设置->高级->管理证书->服务器,它最终会显示在此处,可以将其删除。

来源,警告,非常参差不齐,部分过时: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md

答案 31 :(得分:2)

mac / osx上的SSL / HTTPS localhost修复:

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

  2. 点击&#34;详情&#34; alias

  3. Chrome开发者工具会在“安全”标签上打开。点击查看证书information window
  4. 将其添加到您的系统&#39;钥匙串(不是您默认选中的登录钥匙串)。

  5. 再次打开钥匙串并找到证书。点击它,确保你&#34;信任&#34;所有。

  6. 重新启动Chrome,它应该可以正常工作。

答案 32 :(得分:2)

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
)

答案 33 :(得分:2)

我在kellenupdate from Toby J的答案之后取得了成功,但必须进行此修订:

创建自签名证书时,有必要将新的subjectAltName字段放在v3_ca扩展名下,而不是v3_req。我将/etc/ssl/openssl.conf复制到了一个临时文件,然后在subjectAltName = DNS:*.example.com下添加了一行[ v3_ca ]。然后将该文件传递给cert creation命令,如

  openssl req -x509 -nodes -newkey rsa:2048 \
          -config /tmp/openssl-revised.cfg \
          -keyout example.com.key -out example.com.crt

并遵循kellen's更新的步骤。

答案 34 :(得分:2)

在Windows上修复Chrome。

首先,您需要导出证书。

  • 在浏览器中找到该网址。网址的“https”段将是 用红线划掉,左边会有一个锁定符号。
  • 右键点击划掉的&#34; https&#34;分割。
  • 您将看到包含各种信息的信息窗口
  • 点击“详细信息”。
  • 导出证书,按照说明接受默认设置。

导入

  • 转到Chrome设置
  • 点击&#34;高级设置&#34;
  • 在HTTPS / SSL下,点击&#34;管理证书&#34;
  • 转到&#34;受信任的根证书颁发机构&#34;
  • 点击进入&#34;导入&#34;
  • 会出现一个弹出窗口,询问您是否要安装此证书。点击&#34;是&#34;。

答案 35 :(得分:2)

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

  • 退出Chrome( cmd + Q )。
  • 启动Keychain Access应用程序并打开“证书”类别。
  • 将证书文件拖到Keychain Access窗口,然后输入证书文件的密码。
  • 双击您的证书并展开“信任”列表。
    • 在行中“使用此证书时”,选择“始终信任”。
    • 关闭此内容并输入密码。
  • 启动Chrome并清除所有缓存。
  • 检查一切正常。

答案 36 :(得分:2)

在Windows上进行开发时,您可以添加到Chrome快捷方式标记--ignore-certificate-errors

预计会忽略证书错误并允许您访问无效的证书网站 https://support.opendns.com/entries/66657664中更详细的说明。

enter image description here

答案 37 :(得分:2)

我遇到了同样的问题:我已将证书安装到Windows&#39;受信任的根权限存储,Chrome仍拒绝该证书,错误为ERR_CERT_COMMON_NAME_INVALID。请注意,如果证书未在商店中正确安装,则错误为ERR_CERT_AUTHORITY_INVALID

正如错误名称this commentthis question暗示的那样,问题在于证书中声明的域名。 当提示输入&#34; Common Name&#34;在生成证书时,我必须输入我用来访问网站的域名(在我的情况下为localhost)。我使用chrome://restart重新启动了Chrome,最终对此新证书感到满意。

答案 38 :(得分:2)

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

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

添加这些文件,此示例全部在一个根目录

的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。对不起windows men和gals。

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

app.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://

上运行您的应用

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

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

快乐的编码!

答案 39 :(得分:1)

  1. 在受信任的根CA Store中添加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

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

答案 40 :(得分:1)

在这里,我的 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 =本地主机
Chrome在抱怨

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

req.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

在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

覆盖开发人员证书

 yourproject\node_modules\webpack-dev-server\ssl   with the **server.pem**

在Chrome设置中->管理证书

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

package.json

 "scripts": {
    "start": "set HTTPS=true&&react-scripts start",

答案 41 :(得分:1)

我刚刚在我的 chrome 中启用了 allow-insecure-localhost 标志,就是这样。

步骤。

  1. 在 Chrome 标签中输入 chrome://flags
  2. 搜索 allow-insecure-localhost 标志并启用它。
  3. 重新启动 Chrome 浏览器。

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

答案 42 :(得分:0)

要在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!!

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

您要将此证书复制到受信任的根证书颁发机构\证书商店。

执行此操作的一种方法:单击Windows的“开始”按钮,然后键入certlm.msc。 然后,根据以下屏幕截图,将新创建的证书拖放到“受信任的根证书颁发机构\证书”存储中。 enter image description here

答案 43 :(得分:0)

我的解决方案和解释:

我有使用IIS资源工具包工具SelfSSL.exe创建的自签名证书。在本地计算机上的证书列表中,我看到此自签名证书只有一个用途服务器身份验证。 因此,我创建了具有以下两个目的的新的自签名证书:服务器身份验证客户端身份验证。现在,Chrome不再抱怨了。

This article显示了多种生成自签名证书的方法。请注意,并非所有选项都允许您指定证书用途。 我使用了PowerShell方式:

$cert = New-SelfSignedCertificate -certstorelocation cert:\localmachine\my -dnsname company.co.nz

注意:正如此answer by kellen所述,Chrome允许您设置证书的用途,但是IMO如果未考虑到最后一个目的,则不能为证书添加新用途。

答案 44 :(得分:0)

上本地测试时,上述答案都没有帮助我在Windows 10上

https://localhost:<port>

但是我找到了这个页面,指出了另一个标志:

https://www.chromium.org/blink/serviceworker/service-worker-faq

  

如果您想使用自签名证书在https://localhost上进行测试,请执行以下操作:

     

$ ./chrome --allow-insecure-localhost https://localhost

这没有消除红色警告,但它确实使我能够使用https专用功能,如服务工作者和网络推送通知。

答案 45 :(得分:0)

以下是仅使用Java 8 keytool.exe而不是openssl的解决方案:

@echo off
set PWD=changeit
set DNSNAME=%COMPUTERNAME%

echo create ca key
keytool -genkeypair -alias ca -keystore test.jks -keyalg RSA -validity 3650 -ext bc:critical=ca:true -dname "CN=CA" -storepass:env PWD -keypass:env PWD
echo generate cert request for ca signing
keytool -certreq -keystore test.jks -storepass:env PWD -alias ca -file ca.csr -ext bc:critical=ca:true
echo generate signed cert
keytool -gencert -keystore test.jks -storepass:env PWD -alias ca -infile ca.csr -outfile ca.cer -validity 3650 -ext bc:critical=ca:true
echo CA created. Import ca.cer in windows and firefox' certificate store as "Trusted CA".
pause

echo create server cert key for %DNSNAME%
keytool -genkeypair -alias leaf -keystore test.jks -keyalg RSA -validity 3650 -ext bc=ca:false -ext san=dns:%DNSNAME%,dns:localhost,ip:127.0.0.1 -dname "CN=Leaf" -storepass:env PWD -keypass:env PWD
echo generate cert request
keytool -certreq -keystore test.jks -storepass:env PWD -alias leaf -file leaf.csr -ext bc=ca:false -ext san=dns:%DNSNAME%,dns:localhost,ip:127.0.0.1
echo generate signed cert
keytool -gencert -keystore test.jks -storepass:env PWD -alias ca -infile leaf.csr -outfile leaf.cer -validity 3650 -ext bc=ca:false -ext san=dns:%DNSNAME%,dns:localhost,ip:127.0.0.1

rem see content
rem keytool -printcert -file leaf.cer -storepass:env PWD 

echo install in orig keystore
keytool -importcert -keystore test.jks -storepass:env PWD -file leaf.cer -alias leaf

echo content of test.jks:
keytool -list -v -storepass:env PWD -keystore test.jks
pause

您也可以使用管道而不是文件,但是如果出现问题,您可以检查中间结果。 在Windows上使用IE11,Edge,FF54,Chrome60和Android上的Chrome60进行SSL测试。

请在使用脚本之前更改默认密码。

答案 46 :(得分:0)

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

按照 here 中的证书生成说明进行操作:

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

步骤 1) 生成密钥:

openssl genrsa -out mydomain.local.key 2048

第 2 步)创建配置文件 mydomain.local.conf,仅包含以下内容:

[req]
distinguished_name=req
[SAN]
subjectAltName=DNS:mydomain.local
<块引用>

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

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

第 3 步)创建证书:

openssl req -new -x509 -key mydomain.local.key -out mydomain.local.crt -days 3650 -subj /CN=mydomain.local -extensions SAN -config mydomain.local.conf

步骤 4) 将证书添加到受信任的根证书颁发机构

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

答案 47 :(得分:-2)

假设您使用的是Mac OSX,您还可以在Safari中打开相关网址;说; https://localhost:8080/css/app.css,允许证书。重新启动Chrome,它会起作用。