跳转到内容

OpenSSL 命令

OpenSSL 是一个稳健、功能齐全的开源加密库和工具包,实现了 SSL 及 TLS 协议,并提供了包括数据摘要、对称/非对称加密及完整的 X.509 数字证书管理能力。


通常用于校验文件完整性或生成单向密码哈希。

Terminal window
# 生成文件的 MD5 摘要
openssl dgst -md5 target_file.txt
# 生成字符串摘要 (注意 echo 必须加 -n 防止换行符污染哈希结果)
echo -n "admin123" | openssl md5
# 使用特定盐值生成系统密码
openssl passwd -1 -in password_file.txt -salt myRandomSalt

Terminal window
# 生成 2048 位的 RSA 强私钥
openssl genrsa -out rsa_private.key 2048
# 从私钥中提取分离出对应的公钥
openssl rsa -in rsa_private.key -pubout -out rsa_public.key

探查现有证书细节

Terminal window
# 检查证书有效期
openssl x509 -enddate -noout -in /path/to/server.crt
# 查看证书完整载荷与颁发信息
openssl x509 -text -noout -in /path/to/server.crt

将内网证书注入 Linux 系统根信任区 (以 Ubuntu 为例)

Terminal window
sudo cp ca.crt /usr/local/share/ca-certificates/my_internal_ca.crt
sudo update-ca-certificates

5. 实战:生成包含 SAN 的自制 SSL 证书

Section titled “5. 实战:生成包含 SAN 的自制 SSL 证书”

在现代浏览器(如 Chrome)中,传统的单一 CN(公用名)已被弃用,必须在证书的 SAN (Subject Alternative Name) 扩展中声明所有关联的域名,否则会被拦截拦截为“不安全”。

5.1. Step A: 建立自签的根 CA (Certificate Authority)

Section titled “5.1. Step A: 建立自签的根 CA (Certificate Authority)”
Terminal window
# 1. 生成 CA 自己的私钥
openssl genrsa -out ca.key 2048
# 2. 生成长效期 (100 年) 的根证书 (CRT)
openssl req -sha256 -new -x509 -days 36500 -key ca.key -out ca.crt \
-subj "/C=CN/ST=GD/L=SZ/O=MyCompany/OU=IT/CN=MyInternalRootCA"
Terminal window
# 1. 生成服务端私钥
openssl genrsa -out server.key 2048
# 2. 生成证书签名请求 (CSR),同时在请求中挂载多域名 SAN 扩展
openssl req -new -sha256 -key server.key -out server.csr \
-subj "/C=CN/ST=GD/L=SZ/O=MyCompany/OU=IT/CN=wsl.domain.com" \
-reqexts SAN -config <(cat /etc/pki/tls/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:*.wsl.domain.com,DNS:wsl.domain.com"))
# 3. 使用自建的 CA 证书与私钥,正式签署业务证书
openssl ca -in server.csr -days 36500 -md sha256 -keyfile ca.key -cert ca.crt \
-extensions SAN -config <(cat /etc/pki/tls/openssl.cnf \
<(printf "\n[SAN]\nsubjectAltName=DNS:*.wsl.domain.com,DNS:wsl.domain.com")) \
-out server.crt