我已经为本地主机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 bashopenssl genrsa -out rootCA.key 2048openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.pem

create_certificate_for_domain.sh

    #!/usr/bin/env bashif [ -z "$1" ]thenecho "Please supply a subdomain to create a certificate for";echo "e.g. www.mysite.com"exit;fiif [ ! -f rootCA.pem ]; thenecho 'Please run "create_root_cert_and_key.sh" first, and try again!'exit;fiif [ ! -f v3.ext ]; thenecho '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 doesif [ -f device.key ]; thenKEY_OPT="-key"elseKEY_OPT="-keyout"fiDOMAIN=$1COMMON_NAME=${2:-*.$1}SUBJECT="/C=CA/ST=None/L=NB/O=None/CN=$COMMON_NAME"NUM_OF_DAYS=825openssl req -new -newkey rsa:2048 -sha256 -nodes $KEY_OPT device.key -subj "$SUBJECT" -out device.csrcat v3.ext | sed s/%%DOMAIN%%/"$COMMON_NAME"/g > /tmp/__v3.extopenssl 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 filenamesmv device.csr "$DOMAIN.csr"cp device.crt "$DOMAIN.crt"# remove temp filerm -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,issuerbasicConstraints=CA:FALSEkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentsubjectAltName = @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"exitfiecho "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 $KEYSTOREecho done
}if [ "$(running_as_root)" == "YES" ]
thenimport_certs_to_java_keystore
elseecho "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.crtopenssl 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" 												

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

  1. 如何使git接受自签名证书?

    本文翻译自:How can I make git accept a self signed certificate? Using Git, is there a way to tell it to a ...

  2. 如何从Docker容器内部连接到计算机的本地主机?

    本文翻译自:From inside of a Docker container, how do I connect to the localhost of the machine? So I have ...

  3. 怎么让 chrome 信任自签名证书(亲测有效)

    https本地自签名证书添加到信任证书访问 1.背景 本文适用于基于https(http+ssl)的网站通信.本地调试等,上线是请寻找免费 ssl证书申请. 本地调试过程中,一些特殊的场景需要我使用h ...

  4. ISA2006标准版,本地主机不能上网问题的解决一例

    今天,帮一位朋友解决ISA SERVER2006标准版本地主机不能上网的问题,中间经历了一些困难,有点意思,故写了下来,供各位参考分享. 一.安装环境: windows server 2003 sp2 ...

  5. python获取主机ip_Python 获取本地主机 hostname 和 IP 地址的简单方法

    Python 获取本地主机 hostname 很简单,一行代码就能搞定.获取 IP 地址也一样简单,下面分享一下这些方法.都很简单,基本都是通过 Python 的 socket 库来进行获取的.Pyt ...

  6. TMG学习(四),允许内部网络解析本地主机的Netbiso名称

    Web代理客户端,在IE代理服务器中填写了TMG本地主机的计算机名,而默认情况下TMG中没有开放内部网络可以解析本地主机的计算机名,因此IE代理客户端无法进行上网,如下图所 为了解决这个问题,我们只需 ...

  7. C++在windows下获取本地主机ipv4地址和ipv6地址的代码

    把内容过程中经常用的内容段记录起来,下面内容段是关于C++在windows下获取本地主机ipv4地址和ipv6地址的内容,应该是对码农有所用处. #include <Winsock2.h> ...

  8. mysql - Docker Wordpress连接到本地主机上的数据库服务器

    视频上面的 docker service create --name mysql -p 3306:3306 --env MYSQL_ROOT_PASSWORD=root \     --env MYS ...

  9. 使用SecueCRT在本地主机与远程主机之间交互文件

    名词解释 本地主机:执行SecueCRT,以管理远程Linux或Unix的机器(一般为Windows系统) 远程主机:被SecueCRT进行管理控制的机器(一般为Linux或Unix) 1.开启SFT ...

最新文章

  1. 383. Ransom Note/691. Stickers to Spell Word-- String, Map, back tracking-- 未完待续
  2. 【Stage3D学习笔记续】山寨Starling(八):核心优化(批处理)的实现
  3. python2中的unicode_python2中的unicode()函数在python3中会报错:
  4. Linux系统日志切割
  5. 飞鹤、蒙牛、伊利、澳优、合生元、贝因美,谁是未来国产奶粉的扛把子?
  6. ASP.NET Core 登录登出 - ASP.NET Core 基础教程 - 简单教程,简单编程
  7. IT行业分析之企业信息化技术
  8. [zz]Ubuntu下使用Eclipse和PyDev搭建完美Python开发环境
  9. Django搜索工具——全文检索
  10. 使用Adobe Acrobat提取PDF签章图片
  11. 架构之路--实战项目记录(一) 概述
  12. ediplus 复制编辑一列_Editplus 部分使用技巧(一)
  13. python输出去掉空格
  14. python捕获键盘按键_Python中捕获键盘的方式详解
  15. uinapp下拉刷新,更新列表数据
  16. 怎么在cmd中运行python脚本_cmd中运行python脚本智能使用流程
  17. Mac无法写入移动硬盘 这些软件帮你解决
  18. PHP公众号群发用户过多,公众号四次群发用完怎么办?
  19. jquery 入门(jquery是什么/与JavaScript的联系与区别/jquery版本/引包/入口函数)
  20. 给中年工程师的忠告 转自前辈工程师 “嵌入式玩家”

热门文章

  1. 算法----------最长上升子序列(Java 版本)
  2. oauth2 单点登录_Spring Security Oauth2和Spring Boot实现单点登录
  3. JavaScript语言基础2
  4. jieba(结巴)常用方法
  5. OWASP top 10 (2017) 学习笔记--失效的身份验证
  6. Matplotlib中中文不显示问题
  7. 2018-2019-1 20165305 实验三 实时系统
  8. JS 正则匹配字符串
  9. js获取及判断按键的方法
  10. xcode armv6 armv7 armv7s arm64