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

openssl,生成,rootca,证书,签署,支持,ip,地址 · 浏览次数 : 64

小编点评

## Generate Root CA Certificate for 10.12.0.2 This guide will walk you through generating a root CA certificate for 10.12.0.2 and creating a CSR file for signing. **Prerequisites:** * Ubuntu 22.04 machine * OpenSSL utility **Steps:** **1. Generate Root CA Key and CSR:** ```bash openssl genrsa -out rootCA.key 2048 openssl req -new -key rootCA.key -out rootCA.crt -sha256 -days 1024 ``` **2. Create CSR File for 10.12.0.2:** ```bash openssl genrsa -out 10.12.0.2.key 2048 ``` **3. Create V3 Certificate Extension File:** ```bash cat << EOF > v3.ext authorityKeyIdentifier=keyid,issuerbasicConstraints=CA:FALSEkeyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEnciphermentsubjectAltName = @alt_names[alt_names]# EOF ``` **4. Sign CSR with Root CA Certificate:** ```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 ``` **5. Verify Certificate Signing:** Check the certificate details: ```bash openssl x509 -in 10.12.0.2.crt -noout ``` **6. Set Environment Variables:** ```bash Kestrel_Endpoint_Https="https://*:*" Kestrel_Certificate_Path="/usr/local/share/ca-certificates/10.12.0.2.crt" Kestrel_Key_Path="/usr/local/share/ca-certificates/10.12.0.2.key" ``` **7. Restart Kestrel Service:** ```bash sudo systemctl restart kestrel ``` **8. Use Generated Keys in ASP.NET Core App:** Add the following to your `appsettings.json` file: ```json { // Other appsettings settings "Kestrel": { "Endpoints": { "Https": { "Url": "$Kestrel_Endpoint_Https", "Certificate": { "Path": "$Kestrel_Certificate_Path", "KeyPath": "$Kestrel_Key_Path" } } } } } ``` **Note:** Replace `alt_names` with your desired domain name and adjust `Kestrel_Endpoint_Https` and `Kestrel_Certificate_Path` with the actual paths on your system.

正文

背景

某机房内部访问需要配置 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"
        }
      }
    }
  }
}

与OpenSSL 生成 RootCA (根证书)并自签署证书(支持 IP 地址)相似的内容:

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

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

【Azure 环境】把OpenSSL生产的自签名证书导入到Azure Key Vault Certificate中报错

问题描述 通过本地生成的自签名证书导入到Azure Key Vault Certificate报错。 错误信息 the specified PEM X.509 certificate content can not be read. Please check if certificate is in

ed25519加密签名算法及应用

刷知乎时看到一篇文章,很感兴趣,来学习一下! 转载文章:ed25519加密签名算法及应用 初次使用Github时都需上传本地的公钥,这时需要提前在本地生成密钥对,使用的是ssh-keygen命令: ssh-keygen -C "your_email@example.com" 该命令属于OpenSSH

[转帖]OpenSSL版本历史

OpenSSL版本历史 新闻日志 这是所有 OpenSSL 公告的简洁日志。它们几乎是发布通知。 日期物品 2021 年 7 月 29 日OpenSSL 3.0 的 Beta 2 现已推出。这是一个候选版本:请下载并测试它 2021 年 6 月 17 日新博客文章:OpenSSL 3.0 候选版本

OpenSSL 升级、回滚

ImportError: urllib3 v2.0 only supports OpenSSL 1.1.1+, currently the 'ssl' module is compiled with OpenSSL 1.0.2k-fips 26 Jan 2017. See: https://gith

Ubuntu中安装OpenSSL

一、前期准备 1.1 压缩包下载 在安装openssl之前,我们需要下载对应的压缩包 https://www.openssl.org/source/openssl-3.0.1.tar.gz 此压缩包可以选择win上下载后解压再复制到本地虚拟机中,也可以选择直接在本地虚拟机中使用wget命令进行下载。

[转帖]使用 OpenSSL 加密和解密文件

https://linux.cn/article-13368-1.html OpenSSL 是一个实用工具,它可以确保其他人员无法打开你的敏感和机密消息。 加密是对消息进行编码的一种方法,这样可以保护消息的内容免遭他人窥视。一般有两种类型: 密钥加密或对称加密 公钥加密或非对称加密 密钥加密secr

[转帖]编译升级openssl和openssh版本脚步

https://www.cnblogs.com/zhangb8042/p/15800738.html #!/bin/bash build_dir=/data/project_build openssl_download=https://www.openssl.org/source/openssl-1

nginx+keepalived+pgsql+mysql+redis+tomcat离线部署过程

gcc pcre-devel openssl-devel zlib-devel离线安装包: [包含云盘地址.txt](https://codor.lanzoue.com/iAC7N0sj6vdi) 离线部署java+nginx+tomcat+pgsql+redis.zip: - 城通网盘: http

【Azure 环境】Azure 云环境对于OpenSSL 3.x 的严重漏洞(CVE-2022-3602 和 CVE-2022-3786)的处理公告

问题描述 引用报告:(OpenSSL3.x曝出严重漏洞 : https://www.ctocio.com/ccnews/37529.html ) 最近OpenSSL 3.x 爆出了严重安全漏洞,分别是 CVE-2022-3602 和 CVE-2022-3786. CVE-2022-3602 缓冲区溢