本文主要介绍OpenSSL的常见用法。

说明:本文介绍的OpenSSL常见用法是面向Linux操作系统的。

1 概述

引用OpenSSL官网上的描述,内容如下:

OpenSSL is a robust, commercial-grade, and full-featured toolkit for the Transport Layer Security(TLS) and Secure Sockets Layer(SSL) protocols. It is also a general-purpose cryptography library. 

2 常见用法

2.1 生成server的密钥对

使用OpenSSL的genrsa命令生成服务器的密钥对(包含公钥和私钥),命令如下:

openssl genrsa -out server-key.pem 2048

上面的命令生成一个2048 bit的密钥对,并输出到文件server-key.pem里。

server-key.pem是pem格式的,其内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat server-key.pem 
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEApAIDnEwCgXCP7ttMHnRvZh98Ud8bOOazC2pV/Kn1fE2tO4+H
...
UoiTjsO4dgR7GKwUTfx+LL/lYygy1V7OFUkbgrx63BlhNk6dSojK
-----END RSA PRIVATE KEY-----

虽然server-key.pem文件的头尾都标注着“RSA PRIVATE KEY”,但实际上这个文件中既包括公钥也包括私钥。公钥和私钥总是成对儿出现的。

2.2 生成server的身份证申请(CSR)

使用OpenSSL的req命令,把前面生成的服务器的密钥对文件server-key.pem作为输入,生成一个身份证申请(CSR)文件“server-csr.pem”。命令如下:

openssl req -nodes -new -key server-key.pem -subj "/CN=localhost" -out server-csr.pem

这个server-csr.pem中的公钥是从server-key.pem里提取出来的,域名配置为“localhost”。需要注意的是,如果将来启动一个HTTPS服务,该HTTPS服务使用了签署server-csr.pem生成的身份证CRT,那么客户端必须通过域名“localhost”访问这个HTTPS服务。

server-csr.pem文件也是PEM格式的,server-csr.pem的内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat server-csr.pem 
-----BEGIN CERTIFICATE REQUEST-----
MIICWTCCAUECAQAwFDESMBAGA1UEAwwJbG9jYWxob3N0MIIBIjANBgkqhkiG9w0B
...
cSTcWonudFFNZeRdSzcfNl8Zl0WQmOaODZ343Sc=
-----END CERTIFICATE REQUEST-----
[root@node1 /opt/liitdar/mydemos/simples/tls]# 

从上述文件内容可以看到,CSR文件的头尾都标注着“CERTIFICATE REQUEST”。

2.3 生成CA的身份证(CRT)

通过了解数字签名技术(相关文章链接点击此处),我们知道必须要有一个CA对前面生成的CSR进行签名,才能生成服务器的身份证(CRT)文件。

在这里,我们创建一个CA,并生成该CA的密钥对和自签名的身份证(CRT),过程如下。

2.3.1 生成CA的密钥对

使用OpenSSL的genrsa命令,生成CA的密钥对:

openssl genrsa -out ca-key.pem 2048

2.3.2 生成CA的身份证

使用OpenSSL的x509命令,生成CA的自签名身份证:

openssl req -x509 -new -nodes -key ca-key.pem -days 10000 -out ca-crt.pem -subj "/CN=test-ca"

上面的命令生成了CA的自签名的身份证文件ca-crt.pem。其中,ca-key.pem是前面创建的CA的私钥(其实是密钥对)。需要注意的是,因为是自签名的CA身份证,所以上面步骤中没有生成身份证申请文件(CSR)的过程,而是直接输出了CA的身份证。另外,在本例中CA的域名是“test-ca”。

2.4 生成server的身份证(CRT)

在2.3节中,我们创建了一个CA(包括密钥对和身份证),接下来就可以使用该CA为前面创建的server的CSR进行签名了。使用该CA的私钥(ca-key.pem)来签署server的身份证,命令如下:

openssl x509 -req -in server-csr.pem -CA ca-crt.pem -CAkey ca-key.pem -CAcreateserial -out server-crt.pem -days 365

上面的OpenSSL的x509命令使用指定的私钥(本例中是前面生成的CA的私钥ca-key.pem)签署身份证申请(CSR)文件(本例中是server-csr.pem),输出经CA签名的身份证(本例中是server-crt.pem)。即,server的身份证是用一个自签名的CA的来签署的。

server-crt.pem也是PEM格式的,server-crt.pem内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat server-crt.pem 
-----BEGIN CERTIFICATE-----
MIICojCCAYoCCQDLXPX19JteTzANBgkqhkiG9w0BAQsFADASMRAwDgYDVQQDDAd0
...
zYKS30I7
-----END CERTIFICATE-----
[root@node1 /opt/liitdar/mydemos/simples/tls]# 

由上述文件内容可以看到,CRT文件的头尾标记为“CERTIFICATE”。

注意:签署server-csr.pem得到server的身份证(server-crt.pem)的过程中,不仅需要CA的密钥ca-key.pem,还需要CA的身份证ca-crt.pem。

GitHub 加速计划 / ope / openssl
25.12 K
9.99 K
下载
传输层安全性/安全套接层及其加密库
最近提交(Master分支:1 个月前 )
fd39d1c8 Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> (Merged from https://github.com/openssl/openssl/pull/25095) 1 个月前
ae87c488 Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Shane Lontis <shane.lontis@oracle.com> (Merged from https://github.com/openssl/openssl/pull/25095) 1 个月前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐