OpenSSL用法介绍

本文主要介绍OpenSSL的相关知识及其常见用法。

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。

 

你可能感兴趣的:(常用软件,网络安全)