首页 文章

让Chrome接受自签名的localhost证书

提问于
浏览
870

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

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

30 回答

  • 2

    For a test environment

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

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

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

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

  • 16

    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 =证书Thumprint

    appid = GUID(您的选择)

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

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

    重启Chrome和etvoilà它有效 .

    使用localhost:

    或者使用IP地址:

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

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

  • 6

    我自己修复了这个问题,而没有在任何具有适当SSL认证的浏览器上更改设置 . 我使用mac,因此需要对我的ssl认证进行钥匙串更新 . 我必须在chrome的ssl认证中添加主题alt名称才能接受它 . 截至今天,这是针对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

    快乐的编码!

  • 452

    我在kellen的答案之后取得了成功,并获得了至关重要的update from Toby J,但必须进行此修订:

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

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

    并按照kellen's更新了步骤 .

  • 10

    UPDATE FOR CHROME 58+ (RELEASED 2017-04-19)

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

    If your self-signed certs worked fine in the past 但突然开始在Chrome 58中产生错误,这就是原因 .

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

    对于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的证书查看器(已移至F12下的"Security"标签页)中,您应该会在 Extensions 下将其列为 Certificate Subject Alternative Name

  • 2

    这篇文章已经充满了回复,但我根据其他一些答案创建了一个 bash script ,以便更容易在Chrome中有效 generate a self-signed TLS certificate (在 Chrome 65.x 中测试过) . 希望它对其他人有用 .

    self-signed-tls bash脚本

    安装( and trust )证书后,不要忘记重启Chrome( chrome://restart


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

    cfssl

  • 2

    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

  • 80

    这对我有用:

    • 使用Chrome,通过HTTPS点击服务器上的页面并继续浏览红色警告页面(假设您尚未执行此操作) .

    • 打开 Chrome Settings > Show advanced settings > HTTPS/SSL > Manage Certificates .

    • 单击 Authorities 选项卡并向下滚动以在您为证书提供的组织名称下查找证书 .

    • 选择它,单击编辑( NOTE :在最近版本的Chrome中,按钮现在是"Advanced"而不是"Edit"),选中所有框并单击确定 . 您可能需要重新启动Chrome .

    您现在应该在页面上获得漂亮的绿色锁定 .

    EDIT: 我在新计算机上再次尝试了此操作,并且仅通过继续红色不受信任的证书页面,证书未显示在“管理证书”窗口中 . 我必须做以下事情:

    • 在包含不受信任证书的页面上( https:// 以红色划掉),单击锁定>证书信息 . NOTE: 在较新版本的chrome上,您必须打开 Developer Tools > Security ,然后选择 View certificate .

    • 单击 Details tab > Export . 选择 PKCS #7, single certificate 作为文件格式 .

    • 然后按照我的原始说明进入“管理证书”页面 . 单击 Authorities tab > Import 并选择导出证书的文件,并确保选择 PKCS #7, single certificate 作为文件类型 .

    • 如果提示认证存储,请选择“受信任的根证书颁发机构”

    • 选中所有框,然后单击“确定” . 重启Chrome .

  • 4

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

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

    基本上:

    • 双击带有X的锁图标,然后将证书图标拖放到桌面,

    • 打开此文件(以.cer扩展名结尾);这将打开钥匙串应用程序,允许您批准证书 .

  • 4

    当我尝试在浏览器中导入证书时,它对我不起作用...在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 !!!

    祝好运! ;)

  • 55

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

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

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

    jersully帖子:

    如果您不想打扰内部证书...在地址栏中键入chrome:// flags / . 滚动或搜索“记住”决策,以便在指定的时间内完成SSL错误 . 选择记住三个月 .

  • 31

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

    • 打开钥匙串访问

    • 在"Keychains"列表中选择"System"

    • 在"Category"列表中选择"Certificates"

    • 选择"File | Import Items..."

    • 浏览到上面创建的文件"rootCA.pem",选择它,然后单击"Open"

    • 在"Certificates"列表中选择新导入的证书 .

    • 单击"i"按钮,或右键单击证书,然后选择"Get Info"

    • 展开"Trust"选项

    • 将"When using this certificate"更改为"Always Trust"

    • 关闭对话框,系统将提示您输入密码 .

    • 关闭并重新打开正在使用目标域的任何选项卡,它将被安全加载!

    作为奖励,如果您需要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
    
  • 3

    我不得不在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时,自签名证书可以正常运行 . 但是 don't browse the web with the browser launched with this script 你不会被告知无效证书!

  • 2

    从Chrome 58开始,由于缺少SAN,我开始在 macOS 上收到证书错误 . 以下是如何再次获取地址栏上的绿色锁定 .

    • 使用以下命令生成新证书:
    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
    
    • server.crt 导入KeyChain,然后双击证书,展开 Trust ,并选择始终信任

    刷新Google Chrome中的页面https://domain.dev,以便绿色锁定恢复 .

  • 5

    单击页面上的任意位置并键入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'));
    
  • 61

    我尝试了所有内容以及它的工作原理:导入时,选择正确的类别,即 Trusted Root Certificate Authorities

    (对不起,这是德语,但只需按照图片)

  • 125

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

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

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

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

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

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

    展开“信任”部分 .

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

  • 2

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

    正如错误名称this commentthis question暗示的那样,问题在于证书中声明的域名 . When prompted for the "Common Name" while generating the certificate, I had to enter the domain name 我正在使用访问该网站(在我的情况下为 localhost ) . 我使用 chrome://restart 重启了Chrome,终于对这个新证书感到满意了 .

  • 1

    如果您是 on a mac 并且没有看到导出选项卡或如何获取证书,这对我有用:

    • 点击https://之前的锁定

    • 转到"Connection"标签

    • 点击“证书信息”

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

    • 将小证书图标拖到您的桌面(或任何地方) .

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

    In some cases, this is enough and you can now refresh the page.

    除此以外:

    • 双击新添加的证书 .

    • 在信任下拉列表下将"When using this certificate"选项更改为"Always Trust"

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


    来自Wolph的编辑

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

    • 将以下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
    
    • 使脚本可执行(从shell):
    chmod +x whitelist_ssl_certificate.ssh
    
    • 运行所需域的脚本(只需复制/粘贴完整的URL工作):
    ./whitelist_ssl_certificate.ssh https://your_website/whatever
    
  • 36

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

    enter image description here

    单击 Certificate information 链接后,您将看到以下对话框:

    enter image description here

    它告诉您哪个证书存储是正确的,它是 Trusted Root Certification Authorities 存储 .

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

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

    • cert.pem 是这个名字您的自签名证书 .

  • 16

    UPDATED 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 ,甚至更早, danger ) . 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”选项,并且旁路短语不起作用,那么对于快速的一次性,这个hack很有效:

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

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

    (和@Chris的投票回答https://stackoverflow.com/a/31900210/430128

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

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

  • 5

    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

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

  • 3

    您确定该网站的地址与证书相同吗?我在使用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

  • 87
    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
    )
    
  • 2

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

    From the Docs:

    在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将设置为“你,你,你” . 删除证书certutil -d sql:$ HOME / .pki / nssdb -D -n <证书昵称>

    Excerpt From: https://chromium.googlesource.com/chromium/src/+/HEAD/docs/linux_cert_management.md

  • 85

    更新11月11日:这个答案可能不适用于大多数较新版本的Chrome . 更新02/2016:可以在这里找到更好的Mac用户说明 .

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

    • 单击标有 Connection 的选项卡,然后单击 Certificate Information

    • 单击 Details 选项卡,单击按钮 Copy to File... . 这将打开证书导出向导,单击 Next 至进入 Export File Format 屏幕 .

    • 选择 DER encoded binary X.509 (.CER) ,点击 Next

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

    • 打开Chrome设置,滚动到底部,然后点击 Show advanced settings...

    • HTTPS/SSL 下,单击 Manage certificates...

    • 单击 Trusted Root Certification Authorities 选项卡,然后单击 Import... 按钮 . 这将打开“证书导入向导” . 单击 Next 进入 File to Import 屏幕 .

    • 单击 Browse... 并选择之前保存的证书文件,然后单击 Next .

    • 选择 Place all certificates in the following store . 所选商店应为 Trusted Root Certification Authorities . 如果不是,请单击 Browse... 并选择它 . 单击 NextFinish

    • 单击安全警告上的 Yes .

    • 重新启动Chrome .

  • 2

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

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

  • 2

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

    What is shown in the blog did not work.

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

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

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

  • 442

    NOT FOR PROD

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

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

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

    单击 Enable .

  • 110

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

    chrome://restart

相关问题