OpenSSL常见用法

时间:2025-03-04 06:57:43

本文主要介绍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  2048

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

是pem格式的,其内容如下:

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

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

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

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

openssl req -nodes -new -key  -subj "/CN=localhost" -out 

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

文件也是PEM格式的,的内容如下:

[root@node1 /opt/liitdar/mydemos/simples/tls]# cat  
-----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  2048

2.3.2 生成CA的身份证

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

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

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

2.4 生成server的身份证(CRT)

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

openssl x509 -req -in  -CA  -CAkey  -CAcreateserial -out  -days 365

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

也是PEM格式的,内容如下:

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

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

注意:签署得到server的身份证()的过程中,不仅需要CA的密钥,还需要CA的身份证。