OpenSSL 的一般使用
OpenSSL 是一个开放源代码的软件库包。这个包广泛被应用在互联网的网页服务器上。 其主要库是以 C 语言所写成,实现了基本的加密功能,实现了 SSL 与 TLS 协议。
以下命令均在 cygwin 或 linux 下运行 以下命令是在这个版本
OpenSSL 1.1.1g 21 Apr 2020
下的 OpenSSL 运行的
-
查看 openssl 的版本信息
-
查看帮助,这里会输出 openssl 支持的算法
-
查看某个命令的帮助
-
查看密码套件
-
数字摘要
-
输出当前时间戳
-
输出纳秒 这是一个 9 位的数字 一些简单的伪随机数算法会使用纳秒作为种子
-
生成 32 位随机字符串
-
输出随机数字
-
查看 对称加密命令和可以使用的算法
-
enc 使用对称加密算法
-
生成 rsa 私钥
-
从私钥中提取公钥
-
公钥加密文件
-
私钥解密文件
-
使用私钥生成签名
-
使用公钥验证签名
-
对文件的内容进行 base64 编码
-
对文件的内容进行 base64 解码
-
比较两个文件的内容,如果两个文件内容一致则不会有输出
-
生成一个 csr 文件
- 启动一个问题/回答的交互式会话,其它随便填就好,extra attributes 可以留空
- 其实 openssl 有一键生成密钥对, csr 和 证书的命令
-
查看 csr 文件内容
-
使用 csr 和 私钥生成自签证书
-
一条命令生成密钥和证书
-
查看证书内容
-
查看证书序列号
-
查看证书有效时间
生成多个域名的证书
一般使用 OpenSSL 生成证书时都是 v1 版的,不带扩展属性。 多域名证书需要用到 v3 版的 extensions 的 Subject Alternative Name (SAN 主题替代名称)
-
寻找默认配置文件
-
复制一份默认配置文件
-
编辑 openssl.cnf
-
[ req ] 字段下加入 req_extensions = v3_req
-
[ v3_req ] 字段下加入 subjectAltName = @alt_names
-
在配置文件的最后最后新建一个字段 [ alt_names ]
-
在 [ alt_names ] 里按以下格式写入多个域名
-
-
新建私钥
-
生成 csr 文件
-
生成数字证书
自建 CA
-
创建 CA 目录
-
寻找默认配置文件
-
复制一份默认配置文件
-
修改 openssl.cnf 文件
-
把 [ CA_default ] 的 dir 修改成 ~/ssl/demoCA/ 的绝对路径,类似于这样
-
-
生成 CA 根证书及密钥
-
生成客户端私钥
-
用该客户端私钥生成证书签名请求
-
使用 CA 根证书签发客户端证书
-
注意:默认要求 国家,省,公司名称三项必须和 CA 一致
-
如果不想一致,可以修改 openssl.cnf 的 [ CA_default ] 的 policy 为 policy_anything
证书链合并
一些情况下,从 CA 那里申请到的 SSL 证书需要配置证书链,因为颁发的 CA 只是一个中间 CA 。 这个时候,需要把 CA 的证书和 SSL 证书都转换成 pem 格式。 然后新建一个文件,按照 最终实体证书 → 中间证书 → 根证书 这样的顺序,把证书的 pem 格式的内容复制进去,证书之间用一个空行隔开。 例如这样
根证书大多数情况下都会内置在客户端,所以大多数情况下都只需要 最终实体证书 和 中间证书。 有时 中间证书 可能有多个,按照签发顺序排列就好,反正就是下面的证书颁发上面的证书。
有时还需要把私钥和证书合并成一个文件,一般是把私钥放在前面,证书放在后面,例如 这样
其它命令
openssl s_time 用于测试 TSL 服务
openssl s_server 用于测试 TSL 客户端,例如浏览器对各个加密套件的支持情况
openssl s_client 用于测试 TSL 服务端
-
可以像 telnet 那用测试端口
-
可以像 telnet 模拟 http 那样,模拟 https
openssl smime 用于处理 S/MIME 邮件,它能加密、解密、签名和验证 S/MIME 消息
openssl ca ca 命令是一个小型 CA 系统。它能签发证书请求和生成 CRL。它维护一个已签发证书状态的文本数据库。