使Chrome接受自签名的本地主机证书

2023-05-16

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

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


#1楼

的Linux

如果您使用的是Linux,则还可以遵循以下官方Wiki页面:

  • 在Linux上配置SSL证书。
  • NSS共享数据库和LINUX
  • NSS共享数据库方法

基本上:

  • 点击带有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

如果仍然无法正常工作,则可能会受到以下错误的影响: 问题55050:Ubuntu SSL错误8179

注意:在使用上述命令之前,请确保您具有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


#2楼

这为我工作:

  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。

#3楼

对于测试环境

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

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

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

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


#4楼

更新11/2017:此答案可能不适用于大多数较新版本的Chrome。

更新02/2016:可在此处找到针对Mac用户的更好说明。

  1. 在要添加的站点上,右键单击地址栏中的红色锁定图标: 在此处输入图片说明

    1. 单击标签为“ 连接”的选项卡,然后单击“ 证书信息”

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

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

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

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

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

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

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

    9. 选择将所有证书放入以下存储中 。 所选存储应为“ 受信任的根证书颁发机构” 。 如果不是,请单击浏览...,然后选择它。 单击下一步完成

    10. 在安全警告上单击“ ”。

    11. 重新启动Chrome。


#5楼

单击URL旁边的划线标记图标时,您将看到一个类似以下的框:

在此处输入图片说明

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

在此处输入图片说明

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

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

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

#6楼

我必须调整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时,自签名证书可以正常使用。 但是, 请勿使用以此脚本启动的浏览器浏览网络,否则不会警告您证书无效!


#7楼

如果您使用的是Mac,并且看不到“导出”标签或如何获取证书,那么这对我有用:

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

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

  4. 将该小证书图标拖到桌面上(或任何位置)。

  5. 双击已下载的.cer文件,这会将其导入您的钥匙串中,然后打开“钥匙串访问”以访问您的证书列表。

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

    除此以外:

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

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


从沃尔夫编辑

为了使此操作更容易一些,您可以使用以下脚本( source ):

  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 
  2. 使脚本可执行(从shell):

     chmod +x whitelist_ssl_certificate.ssh 
  3. 为您想要的域运行脚本(只需复制/粘贴完整的URL即可):

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

#8楼

这是不断出现的-特别是对于Mac OS X Yosemite上的Google Chrome!

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

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

快活的帖子:

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

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

#9楼

仅适用于localhost

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

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

您应该看到突出显示的文字:允许从本地主机加载的资源使用无效证书

点击Enable


#10楼

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

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

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

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

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

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

展开“信任”部分。

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


#11楼

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

博客中显示的内容无效。

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

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

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


#12楼

正如有人指出的那样,您需要重新启动所有的Chrome,而不仅仅是重新启动浏览器窗口。 最快的方法是打开一个选项卡来...

chrome://restart


#13楼

在Windows上修复Chrome。

首先,您需要导出证书。

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

导入

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

#14楼

2018年4月3日更新

铬团队推荐

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

快速超级轻松解决方案

尽管存在安全错误,但可以在错误页面中键入一个秘密的旁路短语以使Chrome继续运行: thisisunsafe (在Chrome的早期版本中,键入badidea ,甚至在更早版本中, 危险 )。 除非您确实需要它,否则请不要使用它!

资源:

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

如果其他所有方法都失败

如果“无论如何继续”选项不可用,或者旁路词组不起作用,那么一次过就可以使用此技巧:

  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 。


#15楼

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

如错误名称, 注释和问题所提示 ,问题出在证书中声明的域名中。 当在生成证书时提示您输入“公用名”时,我必须输入用来访问站点的域名 (在我的情况下为localhost )。 我使用chrome://restart重新启动了Chrome,终于对这个新证书感到满意。


#16楼

CHROME 58+的更新(已发布2017-04-19)

从Chrome 58开始, 删除了仅使用commonName标识主机的功能。 证书现在必须使用subjectAltName来标识其主机。 在此处查看更多讨论,并在此处查看错误跟踪器 。 过去, subjectAltName仅用于多主机证书,因此某些内部CA工具不包含它们。

如果您的自签名证书过去运行良好,但突然开始在Chrome 58中生成错误,这就是原因。

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

对于openssl,这意味着您的OpenSSL配置 (在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的证书查看器(已移至F12下的“安全”标签)中,您应该看到它在“ Extensions为“ Certificate Subject Alternative Name

Chrome证书查看器


#17楼

在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.ext ,以避免主题备用名称丢失错误

如果要创建一个新的自签名证书,该证书将使用您自己的根权限进行完全信任,则可以使用以下脚本来进行此操作。

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

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。 为此,请遵循以下说明,或在mitmproxy网站上对该一般过程进行更详细的说明:

您可以使用以下命令在命令行中通过以下两种方式之一进行操作,该命令将提示您输入密码:

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

或使用“ 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

#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

其中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

然后,在我的情况下,我有一个自托管的Web应用程序,因此我需要将证书与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 =证书缩图

appid = GUID(您的选择)

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

在此处输入图片说明

但是我意识到我应该导入根权限证书而不是域证书。 因此,我使用mmc控制台(“文件/添加或删除管理单元/证书/添加/计算机帐户/ LocalComputer / OK”)在“受信任的根证书颁发机构”存储中导入了rootCA.pem。

在此处输入图片说明

重新启动Chrome,然后开始工作。

使用本地主机:

在此处输入图片说明

或使用IP地址:

在此处输入图片说明

我唯一无法实现的是,它具有过时的密码(图片上的红色正方形)。 感谢您提供帮助。

使用makecert不可能添加SAN信息。 使用New-SelfSignedCertificate(Powershell),您可以添加SAN信息,它也可以工作。


#19楼

从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中,然后双击证书,展开Trust ,然后选择Always Trust

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


#20楼

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


#21楼

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

自签名-tls bash脚本

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


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

cfssl


#22楼

我自己解决了这个问题,而没有在任何具有适当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'

对于macs,仅添加可信认证(必需):

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

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

我正在使用带有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

快乐的编码!


#23楼

单击页面上的任意位置,然后键入BYPASS_SEQUENCE

thisisunsafe ”是适用于Chrome 65版的BYPASS_SEQUENCE

badidea ” Chrome版本badidea

在过去的Chrome版本中使用“ danger

您无需查找输入字段,只需键入它即可。 感觉很奇怪,但是正在工作。

我在Mac High Sierra上尝试过。

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

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

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

现在,它们已经被伪装了,但是要查看真正的BYPASS_SEQUENCE,您可以在浏览器控制台中运行以下代码。

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

#24楼

当我尝试在浏览器中导入证书时,它对我不起作用...在chrome open Developer Tools> Security中,选择查看证书。 单击详细信息选项卡并将其导出。

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

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

别忘了重启chrome !!!

祝好运! ;)


#25楼

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

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

#26楼

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

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

在此处输入图片说明


#27楼

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
)

#28楼

我无法在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


#29楼

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

这是它接受的自签名CA证书。 这是我发现绕过cert_authority_invalid的唯一方法,我尝试了几个小时才能使其接受自签名的终点证书,而不是雪茄。 只要声明为CA:TRUE ,UI就会接受自签名的权限。 之后,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现在需要主题备用名称,并且几乎忽略了CN。

为他人:

  • certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n <nickname> -i <my.crt> //用于服务器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可通过certutil修改的nss数据库中的证书标记

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

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

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

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

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


#30楼

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

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


#31楼

要在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 。 然后,根据以下屏幕截图,将新创建的证书拖放到“ 受信任的根证书颁发机构\\证书”存储中。 在此处输入图片说明


#32楼

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

#33楼

您确定该网站提供服务的地址与证书相同吗? 我在使用Chrome和自签名证书时遇到了同样的问题,但最终我发现,对证书上的域名进行验证非常挑剔(应该如此)。

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

在Google Chrome中安装证书

在Internet Explorer中安装证书

还请看一下这两种创建自签名证书的方法(我假设您正在使用IIS,但您没有提到)。

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


#34楼

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

Google Chrome,Mac OS X和自签名SSL证书

基本上:

  1. 双击带有X的锁图标,然后将证书图标拖放到桌面上,
  2. 打开此文件(扩展名为.cer); 这将打开钥匙串应用程序,使您可以批准证书。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使Chrome接受自签名的本地主机证书 的相关文章

  • 下载和编译 Chrome 时遇到的问题

    下载代码前最基本的代理设置 https blog csdn net siyu77 article details 50916320 对于 ShadowSocks 代理 https proxy 也要设置成 http localhost 108
  • Google Chrome浏览器无法翻译网页怎么办?

    最近喜欢上了一个数据分析的python脚本 可以直接出html版的数据分析报告 但是指标都是英文的 实在是看不懂 就想到了要用网页翻译这个功能 但是发现chrome浏览器不能翻译了 找了很多办法都没有解决 也是找了很久 尝试着找扩展属性包
  • python+selenium+实战(6)

    web 自动化脚本生成方式 1 selenium IDE 直接录屏 录制完成生成脚本 缺点 容易产生很多错误 解决错误的时间成本太高 2 自己写 remote复用已有浏览器 相当于开启浏览器调试模式 1 配置复用浏览器 注意要关闭浏览器 包
  • (二)selenium IDE 插件下载与安装

    前面selenium已经下载安装成功 接下来尝试录制下脚本 此时有个IDE插件是必备的 1 下载Chrome插件 进入网址 https www extfans com 搜索 selenium IDE 然后下载 2 安装插件 打开Chrome
  • vue全屏某个dom元素(包括退出全屏、监听)

    vue全屏某个dom元素 包括退出全屏 监听 1 话不多说直接上源码 一 左上角的图标是随着DOM 元素是否全屏而改变的 二 用isFullscreen来监听DOM是否全屏 三 用screenfull toggle element 来使元素
  • 解决Chrome, NET::ERR_CERT_AUTHORITY_INVALID

    文章目录 前言 解决方法一 解决方法二 总结 前言 解决方法一 首先清理一下缓存 三个点 gt 设置 gt 清除浏览数据 即可 如果还解决不了 因为Chrome是默认使用HSTS传输 严格的http传输方式 解决方法二 在Chrome浏览框
  • 谷歌,前后端Failed to load resource: net::ERR_CERT_AUTHORITY_INVALID

    项目场景 Springboot vue前后端分离 问题描述 谷歌浏览器调试以上条件的前后端分离项目时出现Failed to load resource net ERR CERT AUTHORITY INVALID 记录我出现的问题及解决方法
  • 使用JavaScript调用常用浏览器,解决IE浏览器兼容性问题

    目录 前言 JavaScript代码 此贴为个人学习记录 便于以后使用 前言 开发中经常会遇到用户使用IE浏览器的情况 但是由于各种兼容问题 网页实际显示效果和开发的效果有较大出入 所以有了以下解决方案 如果当前网页用户使用IE浏览器打开
  • 如何让ChatGPT写情书(三步走)

    近年来 人工智能技术的迅猛发展给我们生活带来了许多便利和惊喜 而动人的情书文学也逐渐成为ChatGPT技术的应用领域之一 ChatGPT模型是一种递归神经网络 可以在大量数据的基础上为用户生成语言内容 使用GPT来写情书 相比以前的纯手工撰
  • (转)42个超实用的Google Chrome 插件,值得你拥有,建议收藏!

    每日英文 When friends ignore you don t be sad everyone has his own life who can not always be with you 当朋友忽略你时 不要伤心 每个人都有自己的
  • 解决谷歌人机验证(Captcha)显示问题

    文章目录 前言 一 Header Editor 下载 安装与配置 1 插件下载 2 插件安装 3 插件配置 前言 由于谷歌服务在国内不可用 所以正常访问时某些网址时 经常会出现需要人机验证的问题 影响正常使用 在不使用科学上网的情况下 我们
  • 在Linux中使用selenium(环境部署)

    在Linux中使用selenium 环境部署 1 安装chrome 用下面的命令安装Google Chrome yum install https dl google com linux direct google chrome stabl
  • xe7 安装chrome组件(CEF4Delphi)

    缘起 大屏项目需要用到chrome组件 但为了实现firemonkey的矢量和强大的图形功能 所以只能重新在xe7中安装chrome组件 碰到了一些问题 都一 一化解了 将整个过程记录下来 以供大家采用 1 下载CEF4Delphi mas
  • JAVA 【爬虫】 Selenium 无头浏览,禁止加载图片,启动参数,失效,无效

    JAVA Selenium 无头浏览 禁止加载图片 启动参数 失效 无效 可能有如下几个原因 代码问题 命令参数写错 无头浏览 headless 禁止加载图片 blink settings imagesEnabled false Chrom
  • chrome设置为深色模式

    作为一个程序员 大部分编辑器和软件其实更喜欢深色的模式 那么作为接触最多的chrome浏览器也是想同样设置为深色 但是修改主题的方式只能够让首页和浏览器的边缘为深色 对于实际访问的网页内容并不能做到深色 操作 先检查浏览器版本是否是最新版本
  • elasticsearch-head chrome 插件安装

    前言 由于不能直接访问谷歌商店下载插件 但可以直接在 Github 下载 地址 https github com mobz elasticsearch head raw master crx es head crx 如果觉得慢 可在此下载
  • python 爬取google总结

    1 问题 目前主流的搜索引擎 非google莫属 但其对于非法 流量异常 爬虫 请求的封锁也是异常严厉 本人前段时间有个脚本用到了谷歌搜索 具体见python之由公司名推算出公司官网 余弦相似度 当时直接使用的是一个python开源项目 但
  • 43 个 Bash 编程最容易犯的错误大全

    Bash Pitfalls 1 文章介绍了 40 多条日常 Bash 编程中 老手和新手都容易忽略的错误编程习惯 每条作者在给出错误的范例上 详细分析与解释错误的原因 同时给出正确的改写建议 文中有不少引用的文章 也值得大家仔细阅读 仔细阅
  • 淘宝商品详情接口在电商运营中的应用实例

    一 背景 某电商企业A在运营过程中 发现手动更新商品信息效率低下 且容易出现信息不一致的情况 为了解决这个问题 企业A决定采用淘宝商品详情接口 实现商品信息的自动获取和更新 二 目标 通过集成淘宝商品详情接口 企业A希望实现以下目标 自动获
  • 雪球股票数据接口

    目录儿 雪球 K线接口 K线对象属性 雪球 K线接口 https stock xueqiu com v5 stock chart kline json symbol SZ300396 begin 1664553600000 period d

随机推荐