OpenSSL 生成 RootCA (根证书)并自签署证书(支持 IP 地址)

  • OpenSSL 生成 RootCA (根证书)并自签署证书(支持 IP 地址)已关闭评论
  • 122 次浏览
  • A+
所属分类:linux技术
摘要

某机房内部访问需要配置 HTTPS,网上找的一些证书教程都不是特别好,有些直接生成证书,没有根 CA 的证书导致信任不了 Ubuntu 机器,有些教程只有域名生成,没有 IP 生成,有些甚至报错。故发一个笔者在 Ubuntu 22.04 机器上测试正确可用的流程,这里使用 10.12.0.2 作为例子生成一个证书。


背景

某机房内部访问需要配置 HTTPS,网上找的一些证书教程都不是特别好,有些直接生成证书,没有根 CA 的证书导致信任不了 Ubuntu 机器,有些教程只有域名生成,没有 IP 生成,有些甚至报错。故发一个笔者在 Ubuntu 22.04 机器上测试正确可用的流程,这里使用 10.12.0.2 作为例子生成一个证书。

生成

  1. 生成根 CA 的私钥和证书

    # 生成根 CA 的私钥 openssl genrsa -out rootCA.key 2048  # 使用私钥生成根 CA 的证书 openssl req -x509 -new -nodes -key rootCA.key -sha256 -days 1024 -out rootCA.crt 
  2. 10.12.0.2 生成私钥和证书请求文件(CSR)

    # 生成 10.12.0.2 的私钥 openssl genrsa -out 10.12.0.2.key 2048  # 使用私钥生成证书请求文件 openssl req -new -key 10.12.0.2.key -out 10.12.0.2.csr 
  3. 创建证书扩展文件

    为了确保为 10.12.0.2 签名的证书能够用作服务器身份验证,需要为它创建一个扩展文件。创建一个名为 v3.ext 的文件,并添加以下内容:

    authorityKeyIdentifier=keyid,issuer basicConstraints=CA:FALSE keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment subjectAltName = @alt_names  [alt_names] # 这里 IP 替换成 DNS 就可以签名域名了 IP.1 = 10.12.0.2 
  4. 使用根 CA 的证书为 10.12.0.2 签名证书

    openssl x509 -req -in 10.12.0.2.csr -CA rootCA.crt -CAkey rootCA.key -CAcreateserial -out 10.12.0.2.crt -days 500 -sha256 -extfile v3.ext 

此时文件夹内应该有以下文件:

  • rootCA.key - 根 CA 的私钥。
  • rootCA.crt - 根 CA 的证书。
  • 10.12.0.2.key - 10.12.0.2 的私钥。
  • 10.12.0.2.csr - 10.12.0.2 的证书请求文件。
  • 10.12.0.2.crt - 由根 CA 签名的 10.12.0.2 的证书。

信任

Ubuntu

sudo cp rootCA.crt /usr/local/share/ca-certificates/ sudo update-ca-certificates 

CentOS

sudo cp rootCA.crt /etc/pki/ca-trust/source/anchors/ sudo update-ca-trust 

Windows

右键文件,选择安装证书,选择本地计算机,指定安装到受信任的根证书颁发机构,即可

使用

这里拿 ASP.NET CORE 无反代部署举例,复制 10.12.0.2.key10.12.0.2.crt 文件到应用发布目录,之后在 appsettings.json 里加入或修改如下内容,并重启服务即可。

{   // 上面是其他内容   "Kestrel": {     "Endpoints": {       "Https": {         "Url": "https://*",         "Certificate": {           "Path": "./10.12.0.2.crt",           "KeyPath": "./10.12.0.2.key"         }       }     }   } }