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.com
、www.example.com
或sub.example.com
,都会与证书匹配成功。 - 现代浏览器会优先检查
subjectAltName
中的域名,确保域名与证书匹配。
注意:
如果 subjectAltName
存在但未包含 example.com
,即使 CN
是 example.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 证书的二进制储存格式(不常用)
越学越感到自己的无知
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现