如何基于本地 CA 创建 Windows 本地主机证书?

如何基于本地 CA 创建 Windows 本地主机证书?

在我尝试了解 TLS 证书如何在 Windows 上工作时,我还没有找到简单全面的指南,但我已经完成了一些必要的步骤。

首先,我成功地从 slproweb.com/products/Win32OpenSSL.html 下载了 OpenSSL 命令,即 OpenSSL Light Stable。子命令的简要说明位于https://www.openssl.org/docs/man1.1.0/apps/。我添加了 OpenSSL垃圾桶文件夹到系统 > 属性 > 高级 > 环境变量 > 系统变量 > 路径,这样命令“OpenSSL”就可以在管理员命令提示符窗口中运行。

接下来,我在 deliciousbrains.com/ssl-certificate-authority-for-local-https-development/ 上学习了如何创建本地使用的证书颁发机构 (CA)。这将导致将创建的 .CRT 文件存储在计算机存储位置“受信任的根证书颁发机构”中,本地浏览器在访问 HTTPS 网页时会使用它。可以在“计算机管理控制台”>“证书”(可能必须将其添加为新的 MMC 管理单元)中查看此新 CA 证书,或者在任何浏览器的“选项”中的“查看证书”中查看,或者使用非常有用的证书实用程序Windows 命令。

管理员命令提示符(%windir%\system32\cmd.exe)中用于创建本地 CA 的具体命令是:

  1. 选择一个秘密密码并在被询问时提供它。
  2. 生成私钥:openssl genrsa -des3 -out CA_NAME.key 2048
  3. 从私钥生成 PEM 证书:openssl req -x509 -new -nodes -key CA_NAME.key -sha256 -days 1825 -out CA_NAME.pem
  4. 创建根 CA 证书: openssl x509 -outform der -in CA_NAME.pem -out CA_NAME.crt
  5. 在本地计算机上安装CA根证书:右键单击CA_NAME.crt,选择安装证书证书导入向导>本地计算机>浏览...>受信任的根证书颁发机构

注意:我不清楚这些密码短语和生成的文件中的哪些会再次需要,以及用于什么目的。显然,存储的 CA 证书将用作当前计算机上任何其他更具体的证书的根。

接下来,我在这里要问的问题是如何基于新安装的受信任 CA 证书为 localhost 域中的一个或多个网站(例如:localhost/MY_WEBSITE、localhost/FOLDER/FILE.html)创建服务器授权证书。这将允许使用以下浏览器 URL:https://localhost/MY_WEBSITE没有错误,假设本地服务器监听此类安全的 Web 请求。

我找到了几种算法,但它们似乎都已过时或不完整。显然,该算法的一部分必须是创建一个包含将被授权的网站列表的“SAN”文件,另一部分必须是证书签名请求 (CSR)。

有人可以提供这样的算法,像上面列表一样的步骤列表,用于基于现有本地 CA 证书(如上所示)创建和安装本地主机网站证书吗?在回答之前,请务必测试您的建议。

答案1

OpenSSL 不需要管理终端。

...我不清楚这些密码短语和生成的文件中的哪些会再次需要,以及用于什么目的。

  • 每次签署新证书时都会使用 CA / ICA 密码,因为 CA / ICA 应该始终拥有加密密钥
  • 服务器证书不应该有加密密钥,因为它需要手动干预才能启动
  • 具有加密密钥的客户端证书会在使用证书时请求密码。


...接下来,我在这里问的问题是如何为 localhost 域中的一个或多个网站创建服务器授权证书

这是通过 SAN 配置文件实现的。

  • OpenSSL 的默认 openssl.cnf 对于不熟悉的人来说很难解析,因此我创建了一个自定义的、易于理解的openssl.cnf几年前我的 GitHub
    • 第 164 行:SAN 配置文件开始
    • 第 260 行:V3 配置文件开始
    • 第 430 行:所有必需的命令和信息开始


...有人可以提供这样一种算法,像上面列表一样的步骤列表,用于基于上述创建的现有本地 CA 证书创建和安装本地主机网站证书吗?

为了保证一切顺利,我将使用上面链接的 openssl.cnf 中包含的 V3 配置文件

  1. 创建所需目录:

    mkdir ca\csr certs crl keys
    
  2. 创建所需文件:

    echo 00 > crl\crlnumber && type NUL > index && type NUL > rand && echo 00 > serial
    
  3. 创建 CA

    openssl req -x509 -new -sha512 -days 3650 -newkey rsa:4096 -keyout ca\ca.key.pem -out ca\ca.crt.pem -config .\openssl.cnf -extensions v3_ca
    
    • CA 密钥密码:至少 20 个字符,包含 2 个:大写字母、小写字母、数字和符号

      1. 生成服务器证书 CSR:

        openssl req -out ca\csr\server.csr -new -days 3650 -sha512 -newkey rsa:2048 -keyout keys\server.key.pem -config .\openssl.cnf -extensions v3_sophos -nodes
        
      2. 使用 CA 创建并签署证书:

        openssl x509 -req -sha512 -days 3650 -in ca\csr\server.csr -CA ca\ca.crt.pem -CAkey ca\ca.key.pem -CAserial .\serial -out certs\server.crt.pem -extfile .\openssl.cnf -extensions v3_sophos
        
      3. 将 CA 连接至证书:

        type ca/ca.crt.pem >> certs/server.crt.pem
        
      4. 导出到 PKCS12:

        openssl pkcs12 -export -out certs\server.p12 -inkey certs\server.key.pem -in certs\server.crt.pem -certfile ca\ca.crt.pem
        


附加信息

相关内容