openssl 生成证书和私钥

gpg对称加密与非对称加密

gpg对称加密

gpg非对称加密

CA证书向证书的发布机构申请证书过程

常用后缀名

gpg对称加密

思路:通过gpg -c file 进行文件加密,并生成一个 file.gpg的新文件  ,通过 gpg -d file.gpg >file 可以进行解密
过程如下:
master主机
gpg -c  k8s.sh    //使用gpg  -c 选项对文件实现对称加密,输入密码后加密完成
rsync -av k8s.sh.gpg   root@node1:~
node1主机
gpg -o k8s2.sh -d k8s.sh.gpg    // -o选项指定文件生成路径,-d 对加密文件进行解密并显示,输入密码

gpg非对称加密

复制代码
    **master**
    gpg  --gen-keY   //master生成密钥对
    cd .gnupg/         //进入密钥根目录
    gpg --list-keys         //查看密钥列表
    gpg -a --export -o master-key        //生成公钥
    scp master-key  node1:   
    gpg -o motd  -r master -d motd.gpg   //master节点用私钥解密node1使用自己公钥加密过的文件;-o 指定生成文件目录,-r指定公钥UID,-d指定加密文件

    **node1**
    gpg --list-keys      //node1查看密钥列表
    gpg --import master-key        //导入公钥文件
    gpg  --list-keys                 //再次查看密钥列表,可以看到导入成功
    gpg -e  -r master motd       //-e加密文件,-r 指定公钥UID进行加密
    ls motd*            
    cat  motd.gpg 
    scp motd.gpg  master:
复制代码

CA证书

  向证书的发布机构申请证书过程:

1. 创建虚拟的CA机构,生成证书。操作系统里面安装"XXX CA"的证书;

2. 生成一个自己的密钥,然后填写证书认证申请csr,拿给上面的CA机构去签名;

3. "XXX CA"在给我们发布证书时,把Issuer,Public key,Subject,Valid from,Valid to等信息以明文的形式写到证书里面,然后用一个指纹算法计算出这些数字证书内容的一个指纹;

4. 把指纹和指纹算法用CA的私钥进行加密,然后和证书的内容一起发布;

5. "XXX CA"会给申请公司 “YYY 公司名称” 的私钥给我们

命令参考

复制代码
CA机构证书生成
1.生成CA RSA私钥(使用aes256加密私钥(选填))
   openssl genrsa -aes256 -passout pass:111111 -out ca.key  -pkeyopt rsa_keygen_bits:4096
   # 无密码
   openssl genpkey -algorithm RSA -out ca.key -pkeyopt rsa_keygen_bits:4096
   # -pkeyopt rsa_keygen_bits:2048:指定生成 2048 位 的密钥
    
2.使用 已有RSA 私钥生成自签名证书
 openssl req -new -x509 -days 365 -key ca.key -out cert.crt 
 
 以上两步可以合并为一步 
 openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 365 -out ca.crt   //一次性生成私钥和证书
 
3.生成自己网站的密钥server.key
  # 无密码
  openssl genpkey -algorithm RSA -out server.key -pkeyopt rsa_keygen_bits:4096
  
4.使用 RSA私钥生成 CSR 签名请求
  openssl req -new -key server.key -out server.csr -config openssl.cnf
  # -new:表示生成新的 CSR。
  # -key server.key:指定私钥文件。
  # -out server.csr:输出的 CSR 文件。
  # -config openssl.cnf:使用自定义配置文件。

5.使用 CA 证书及CA密钥 对请求签发证书进行签发,生成 x509证书
    # 有密码
    openssl x509 -req -days 365  -in server.csr -CA cert.crt -CAkey ca.key -passin pass:111111  -CAcreateserial -out server.crt  -extensions v3_req -extfile openssl.cnf

    # 无密码
    openssl x509 -req -days 365  -in server.csr -CA cert.crt -CAkey ca.key -CAcreateserial -out server.crt  -extensions v3_req -extfile openssl.cnf
    
    #-days 365:证书有效期 365 天。
    #-in server.csr:输入的 CSR 文件。
    #-signkey server.key:用于签名的私钥。
    #-out server.crt:生成的自签名证书。
    #-extensions v3_req 和 -extfile openssl.cnf:从配置文件加载扩展信息(如 subjectAltName)。

6.验证证书内容
    openssl x509 -in server.crt -noout -text
复制代码

 -set_serial 01:明确将新生成的证书的序列号设置为 01

为什么序列号重要?

  • 每个证书的序列号必须唯一,确保证书的唯一性。
  • 当证书被撤销时,CA 会在 CRL(Certificate Revocation List)OCSP(Online Certificate Status Protocol) 中标记其序列号。
  • 重复的序列号可能导致证书验证失败。

创建 配置文件定义证书CSR请求

复制代码
[root@master-1 openssl]# cat openssl.cfg
# 该部分配置如何生成证书请求(CSR)
[ req ]
default_bits        = 2048              # 密钥的默认长度(例如 2048 位 RSA 密钥)
default_md          = sha256            # 证书签名使用的哈希算法
default_keyfile     = server.key        # 默认的私钥输出文件
prompt              = no                # 是否提示用户输入主题信息 (no 表示自动填充)
encrypt_key         = no                # 是否加密私钥(yes 加密,no 不加密)
distinguished_name  = req_distinguished_name # 指定主题信息部分的名称
req_extensions      = v3_req            # 扩展字段的配置部分名称

# 该部分定义证书的 主题信息(Subject),如国家、组织、域名等
[ req_distinguished_name ]
C   = CN                      # 国家代码(例如 CN 为中国)
ST  = SX                   # 省/州名称
L   = ShangHai                    # 城市/地区
O   = KN                      # 组织名称
OU  = KN                      # 组织单位名称
CN  = test.com                    # 通用名称(Common Name),通常是域名

# 该部分用于定义 扩展字段,如 subjectAltName
[ v3_req ]
subjectAltName = @alt_names   # 使用 [alt_names] 部分的配置

# 该部分定义 subjectAltName 的具体内容,允许证书绑定多个域名或 IP 地址
[ alt_names ]
DNS.1 = test.com           # 第一个域名
DNS.2 = www.test.com       # 第二个域名
DNS.3 = sub.test.com       # 第三个域名
IP.1  = 192.168.43.130        # 第一个 IP 地址
复制代码

区别:

  • 旧标准CN 字段是过去验证域名的唯一方式。
  • 新标准:现代浏览器 只验证 subjectAltName 字段,忽略 CN如果 SAN 存在但未包含 CN,浏览器也不会匹配 CN
  • 如果客户端访问 example.comwww.example.comsub.example.com,都会与证书匹配成功。
  • 现代浏览器会优先检查 subjectAltName 中的域名,确保域名与证书匹配。

注意:

    如果 subjectAltName 存在但未包含 example.com,即使 CNexample.com,也无法匹配成功。

验证证书

复制代码
[root@master-1 openssl]# openssl x509 -in server.crt  -noout -text
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number: 1 (0x1)
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C=CN, ST=SX, L=ShangHai, O=KN, OU=KN, CN=kn.com   # 授权信息
        Validity
            Not Before: Dec 17 07:48:58 2024 GMT
            Not After : Dec 17 07:48:58 2025 GMT  # 365天
        Subject: C=CN, ST=SX, L=ShangHai, O=KN, OU=KN, CN=kn.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (4096 bit)
                Modulus:
                    00:a3:7a:d4:6d:2c:d6:24:fd:9e:f0:11:72:80:32:
                    0e:ad:9c:e8:60:31:
                    c8:1c:15
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Subject Alternative Name:
                DNS:test.com, DNS:www.test.com, DNS:sub.test.com, IP Address:192.168.43.130
    Signature Algorithm: sha256WithRSAEncryption
         16:f0:7e:9b:c7:73:88:d7:8f:72:b8:a2:ca:c2:1e:3b:6b:d4:
         41:cc:7d:df:cb:99:d1:46:94:48:6c:19:6d:b5:5a:fe:a9:98:
         42:73:
复制代码

 常用后缀名

格式 说明

.crt .cer 证书(Certificate)

.key 密钥/私钥(Private Key)

.csr 证书认证签名请求(Certificate signing request)

*.pem base64编码文本储存格式,可以单独放证书或密钥,也可以同时放两个;base64编码就是两条-------之间的那些莫名其妙的字符

*.der 证书的二进制储存格式(不常用)

posted @   不会跳舞的胖子  阅读(506)  评论(0编辑  收藏  举报
编辑推荐:
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示