关于ssl:LocalHost自签名证书上的Chrome NET :: ERR_CERT_AUTHORITY_INVALID错误

Chrome NET::ERR_CERT_AUTHORITY_INVALID error on self signing certificate at LocalHost

我正在尝试在我的本地PC上设置开发环境。由于生产网站支持HTTPS(这些日子不支持?),我想在localhost上也有这个。我觉得这很容易,但没有。

我有一个XAMP安装,并设置所有,所以我可以访问该网站。但是,每当我在本地访问网站上的任何页面时,我都会收到Chrome警告:

NET :: ERR_CERT_AUTHORITY_INVALID

我确实按照以下线程尝试解决它:

让Chrome接受自签名的localhost证书

我还使用正确的主题备用名称(SAN)部分创建了证书,基于此:

How to Set Up HTTPS Locally Without Getting Annoying Browser Privacy Errors

之后,我生成了CER或P7B文件并将其导入Chrome。我重新启动了Apache和Chrome。

我将证书放在受信任的根证书颁发机构中。不知何故,Chrome决定将其置于中级根证书颁发机构......

我使用的是Chrome 61,我在60年代也是如此。

所以不知怎的,我无法安装自签名证书,并继续得到这个警告,这基本上使得无法在localhost上进行开发......

我知道这种自签名并不完全值得信赖,但必须有一种离线开发的方法吗?从现在开始我们必须在线建立网站是没有意义的吗?...

有任何想法吗?


以下是使用KeyStore Explorer工具的说明。

我创建证书时我之前缺少的两件事是:

  • AKID(授权密钥标识符) - 选择创建时使用的"CN ="。
  • 添加"基本约束"选项(不要选择"是CA")

如果没有这两件事,即使您已将自签名证书安装到MS-CAPI PKI信任库(作为"受信任的根权限"),Chrome也会发出警告/错误。

以下是我使用的步骤。

  • 使用KSE的说明(KeyStore Explorer)
  • 创建一个JKS
  • 创建自签名证书
  • 打开KeyStore Explorer
  • 档案|新的| JKS |好
  • 为您的JKS文件创建密码
  • 档案|另存为... |输入你的密码
  • 输入文件名|好
  • 工具|生成密钥对
  • 选择算法和密钥大小(即2048)|好
  • 选择有效期(即5年)
  • 选择名称(书本图标)|在名称字段中输入|好
  • 即"CN =本地主机......"
  • 添加扩展(非常重要),这将确定它将是什么类型的证书以及如何使用它。此示例适用于带SSL的标准服务器证书。
  • 添加密钥用法项
  • 添加数字签名和密钥加密选项复选框
  • 添加EKU(扩展密钥用法)选项
  • 选择以下两个选项:
  • TLS Web客户端身份验证
  • TLS Web服务器身份验证
  • 添加SAN(主题备用名称)
  • 添加将使用此服务器的所有必需DNS名称和IP地址(如果适用)。 (重复所有所需的值)(例如127.0.0.1和localhost(或)
  • 它完成后会看起来像这样
  • 完成后,您将看到列出了OID(对象标识符)的所有字段好的好
  • 添加AKID(授权密钥标识符)
  • 添加扩展程序"+"
  • 添加扩展类型|授权密钥标识符
  • 选择您在上面创建的CN的授权证书颁发者(.e.g"CN = localhost ...")|好
  • 添加"基本约束"(不要检查"主题是CA")
  • 当你完成后,你会看到列出的这些:点击"确定"
  • 注意:Chrome浏览器需要基本约束和AKID(授权密钥标识符)才能将自签名证书验证为可信证书。
  • 否则,即使您明确地将此证书添加到MS-CAPI受信任的根证书,您也会看到警告或错误消息。
  • 输入要使用的密钥对名称的别名
  • 输入私钥对的密码
  • *注意:此密码必须与JKS文件密钥库密码相同,否则Java在尝试使用此证书时可能会无声地失败。
  • 您应该看到一条表示成功的消息。 |好
  • 然后,保存文件|保存

  • 我在此之后解决了完全相同的问题。

    问题似乎与证书的创建方式有关。

    以下代码来自上述网站。

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    #!/usr/bin/env bash
    mkdir ~/ssl/
    openssl genrsa -des3 -out ~/ssl/rootCA.key 2048
    openssl req -x509 -new -nodes -key ~/ssl/rootCA.key -sha256 -days 1024 -out ~/ssl/rootCA.pem


    #!/usr/bin/env bash
    sudo openssl req -new -sha256 -nodes -out server.csr -newkey rsa:2048 -keyout server.key -config <( cat server.csr.cnf )

    sudo openssl x509 -req -in server.csr -CA ~/ssl/rootCA.pem -CAkey ~/ssl/rootCA.key -CAcreateserial -out server.crt -days 500 -sha256 -extfile v3.ext

    server.csr.cnf文件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    [req]
    default_bits = 2048
    prompt = no
    default_md = sha256
    distinguished_name = dn

    [dn]
    C=US
    ST=New York
    L=Rochester
    O=End Point
    OU=Testing Domain
    emailAddress=your-administrative-address@your-awesome-existing-domain.com
    CN = localhost

    v3.ext文件

    1
    2
    3
    4
    5
    6
    7
    authorityKeyIdentifier=keyid,issuer
    basicConstraints=CA:FALSE
    keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
    subjectAltName = @alt_names

    [alt_names]
    DNS.1 = localhost


    有一个很好的基于GUI的java实用程序,我用它来创建和操作所有PKI称为KeyStore Explorer的东西。比所有命令行选项容易得多:

    http://keystore-explorer.org/