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

我已经为本地主机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


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

摘录自: 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 -i //用于服务器certutil -d sql:$HOME/.pki/nssdb -A -t "P,," -n -i

  • certutil -d sql:$HOME/.pki/nssdb -A -t "C,," -n -i 用于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); 这将打开钥匙串应用程序,使您可以批准证书。

你可能感兴趣的:(使Chrome接受自签名的本地主机证书)