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

背景

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

生成

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

    bash 复制代码
    # 生成根 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)

    bash 复制代码
    # 生成 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 签名证书

    bash 复制代码
    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

bash 复制代码
sudo cp rootCA.crt /usr/local/share/ca-certificates/
sudo update-ca-certificates

CentOS

bash 复制代码
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 里加入或修改如下内容,并重启服务即可。

json 复制代码
{
  // 上面是其他内容
  "Kestrel": {
    "Endpoints": {
      "Https": {
        "Url": "https://*",
        "Certificate": {
          "Path": "./10.12.0.2.crt",
          "KeyPath": "./10.12.0.2.key"
        }
      }
    }
  }
}
相关推荐
旖旎夜光几秒前
Linux(13)(中)
linux·网络
威迪斯特40 分钟前
CentOS图形化操作界面:理论解析与实践指南
linux·运维·centos·组件·图形化·桌面·xserver
一方热衷.1 小时前
在线安装对应版本NVIDIA驱动
linux·运维·服务器
独自归家的兔1 小时前
ubuntu系统安装dbswitch教程 - 备份本地数据到远程服务器
linux·运维·ubuntu
ONE_SIX_MIX1 小时前
ubuntu 24.04 用rdp连接,桌面黑屏问题,解决
linux·运维·ubuntu
龙飞051 小时前
Systemd -systemctl - journalctl 速查表:服务管理 + 日志排障
linux·运维·前端·chrome·systemctl·journalctl
*小海豚*1 小时前
在linux服务器上DNS正常,但是java应用调用第三方解析域名报错
java·linux·服务器
June`1 小时前
muduo项目排查错误+测试
linux·c++·github·muduo网络库
消失的旧时光-19431 小时前
Linux 编辑器入门:nano 与 vim 的区别与选择指南
linux·运维·服务器
晓13131 小时前
第七章 【C语言篇:文件】 文件全面解析
linux·c语言·开发语言