OpenSSL自签名证书

文章目录

  • 生成
    • [1. 生成根证书的私钥(root_private_key.pem)](#1. 生成根证书的私钥(root_private_key.pem))
    • [2. 创建根证书的CSR和自签名证书(root_csr.pem)](#2. 创建根证书的CSR和自签名证书(root_csr.pem))
    • [3. 生成服务器证书的私钥(server_private_key.pem)](#3. 生成服务器证书的私钥(server_private_key.pem))
    • [4. 创建服务器证书的CSR(server_private_key.pem)](#4. 创建服务器证书的CSR(server_private_key.pem))
    • [5. 使用根证书签发服务器证书(server_csr.pem)](#5. 使用根证书签发服务器证书(server_csr.pem))
    • [6. 验证证书](#6. 验证证书)

生成

1. 生成根证书的私钥(root_private_key.pem)

首先,您需要为根证书生成一个私钥。这通常是一个RSA或EC私钥。

  • 注意 centos8 秘钥长度低于2048位会报错
shell 复制代码
openssl genpkey -algorithm RSA -out root_private_key.pem -pkeyopt rsa_keygen_bits:4096

2. 创建根证书的CSR和自签名证书(root_csr.pem)

接下来,使用根证书的私钥生成一个证书签名请求(CSR),并自签名该CSR以生成根证书。

其中CN=My Root CA 可以修改为你需要的根域名

shell 复制代码
# 创建根证书的CSR  
openssl req -new -key root_private_key.pem -out root_csr.pem -subj "/C=US/ST=California/L=San Francisco/O=My Root CA/CN=My Root CA"

在下面的命令中,-extensions v3_ca 指示 OpenSSL 使用名为 v3_ca 的扩展配置。

需要创建一个包含这些扩展的配置文件,并在其中定义 v3_ca 段落

可以写在服务器证书配置的openssl.cnf文件中, 下面为了好区分所以分开写:

shell 复制代码
vim v3_ca
#添加下面文本
[v3_ca]  
basicConstraints = CA:TRUE  
keyUsage = keyCertSign, cRLSign
#保存后运行下面命令生成根证书
# 自签名根证书的CSR以生成根证书  
openssl x509 -req -days 3650 -in root_csr.pem -signkey root_private_key.pem -out root_certificate.pem -extensions v3_ca

3. 生成服务器证书的私钥(server_private_key.pem)

现在,需要为服务器证书生成一个单独的私钥。

shell 复制代码
openssl genpkey -algorithm RSA -out server_private_key.pem -pkeyopt rsa_keygen_bits:2048

4. 创建服务器证书的CSR(server_private_key.pem)

使用服务器证书的私钥生成一个CSR。

将CN=100.70.84.6修改为你自己的域名或IP

如果这里填写的IP/域名和 你服务器访问的IP/域名不匹配,证书始终无效

shell 复制代码
openssl req -new -key server_private_key.pem -out server_csr.pem -subj "/C=US/ST=California/L=San Francisco/O=My Company/CN=100.70.84.6"

5. 使用根证书签发服务器证书(server_csr.pem)

最后,使用根证书和根证书的私钥签发服务器证书的CSR,以生成最终的服务器证书。

在下面的命令中,-extensions v3_req -extfile openssl.cnf 指示 OpenSSL 使用配置文件

(如 openssl.cnf)中定义的 v3_req 段落来添加v3扩展。您需要在配置文件中定义这些扩展,例如:

shell 复制代码
vim openssl.cnf
#添加以下内容
[v3_req]  
keyUsage = digitalSignature, keyEncipherment  
extendedKeyUsage = serverAuth  
subjectAltName = @alt_names  
#服务器使用的域名和服务器IP(可选)如果不需要就删除上面subjectAltName这一行
[alt_names]  
DNS.1 = feng.com  
DNS.2 = www.feng.com
DNS.2 = *.feng.com
DNS.2 = 100.70.84.6
IP.1 = 100.70.84.6
#保存后生成服务器证书
openssl x509 -req -in server_csr.pem -CA root_certificate.pem -CAkey root_private_key.pem -CAcreateserial -out server_certificate.pem -days 3650 -extensions v3_req -extfile openssl.cnf

6. 验证证书

最后,您可以验证生成的根证书和服务器证书。

shell 复制代码
# 验证根证书  
openssl x509 -in root_certificate.pem -text -noout  
  
# 验证服务器证书  
openssl x509 -in server_certificate.pem -text -noout

请注意,这只是一个基本的示例,用于生成根证书和基于该根证书的服务器证书。

在实际应用中,可能需要根据您的具体需求和环境进行更多的配置和调整。

特别是,您需要确保您的私钥得到妥善保管,不要将其泄露给未经授权的人员。

shell 复制代码
vim /nginx/conf/nginx.conf
#在http标签中添加https模块

server {
    listen       443 ssl;
    server_name  100.70.84.6 feng.com www.feng.com;

    ssl_certificate      /nginx/ssl/server_certificate.pem;
    ssl_certificate_key  /nginx/ssl/server_private_key.pem;

    ssl_session_cache    shared:SSL:1m;
    ssl_session_timeout  5m;

    ssl_protocols TLSv1.2 TLSv1.3;
    
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;
    ssl_prefer_server_ciphers on;

    location / {
        #proxy_pass http://100.70.84.6:20157;
        root   html;
        index  index.html index.htm;
    }
}

https://blog.csdn.net/weixin_45500120/article/details/138272014

相关推荐
我爱云计算36 分钟前
K8S详解(5万字详细教程)
linux·运维·云原生·容器·kubernetes
2301_794333913 小时前
实验室服务器配置|通过Docker实现Linux系统多用户隔离与安全防控
linux·服务器·docker·实验室
荣光波比4 小时前
Nginx 实战系列(一)—— Web 核心概念、HTTP/HTTPS协议 与 Nginx 安装
linux·运维·服务器·nginx·云计算
绿箭柠檬茶6 小时前
Ubuntu 使用 Samba 共享文件夹
linux·运维·ubuntu
工藤新一¹7 小时前
Linux —— 虚拟进程地址空间
linux·运维·服务器·c/c++·虚拟进程地址空间
Aspiresky8 小时前
浅析Linux内核scatter-gather list实现
linux·dma·scatter/gather
奔跑吧 android8 小时前
【linux kernel 常用数据结构和设计模式】【数据结构 3】【模拟input子系统input_dev和input_handler之间的多对多关系】
linux·数据结构·input·kernel·input_dev·input_handler·input_handle
再难也得平8 小时前
Linux初级篇
linux·运维·服务器
小猫挖掘机(绝版)9 小时前
通过tailscale实现一台电脑上vscode通过ssh连接另一台电脑上的VMware Linux 虚拟机
linux·windows·vscode·ubuntu·ssh
ajassi200010 小时前
开源 C++ QT Widget 开发(十三)IPC通讯--本地套接字 (Local Socket)
linux·c++·qt·开源