第02课:OpenSSL

第02课:OpenSSL 快速入门

工欲善其事必先利其器,在查看、生成、转换、导入、导出等 SSL 证书的管理方面,OpenSSL 有着得天独厚的功能是支撑。OpenSSL 采用 C 语言作为开发语言,这使得 OpenSSL 具有非常优秀的跨平台性能;它支持 Linux、Windows、Mac、VMS 等多个平台,这使得 OpenSSL 具有非常广泛的适用性,如 Apache 使用它加密 HTTPS 协议,OpenSSH 使用它加密 SSH。

本节是后面一些文章的基础,建议读者按照本文列出的实战步骤,动手自己安装并执行,肯定会有意想不到的收获。

enter image description here

OpenSSL 简介

OpenSSL 是一个稳定的、商用等级的、功能全面的、免费开源的,专为 SSL/TLS 而生一款工具,其命令功能主要分为下面三大类。

标准命令

enter image description here

下面一些命令可能比较常用:

  • ca:签名证书请求;
  • genpkey:生成私钥;
  • pkcs12:把私钥和公钥导出为 PKCS#12 格式;
  • pkcs7:把 PKCS#7 格式的证书转换成为 pem 格式;
  • genrsa:基于 RSA 算法生成的密钥对;
  • s_client:类似于 telnet 或者 nc 的一个客户端测试工具,可以连接到 SSL 的服务器;
  • req:生成 SSL 的证书请求。

信息摘要

其也提供了下面的生成信息摘要的命令函数和工具:

  • blake2b512/blake2s256
  • gost
  • md4/md5
  • mdc2
  • rmd160
  • sha1/sha224/sha256/sha384/sha512

其中不得不提的就是 MD(Message Digest)和 SHA,MD4 是 Rivest 于 1990 年设计的单向散列函数,能够产生 128 比特的散列值,不过随着 Dobbertin 提出寻找 MD4 散列的碰撞的方法,因此现在它已经不安全了。MD5 是也是由 Rivest 于 1991 年设计的单向散列函数,也能够产生 128 位的散列值,不过 MD5 的强抗碰撞性已经被攻破,换句话就是说,现在已经能够产生具备相同散列值的两条不同的消息,因此 MD4/MD5 的算法都已经不安全了。

再来看看 SHA 相关的算法,SHA-1 是由 NIST(美国国家标准技术研究所)设计的一种能够产生 160 比特的散列值的单向散列函数,1993 年被美国联邦信息处理标准规格发布的时候 SHA,1995 年又发布了一个修订版,称之为 SHA-1,不过 SHA-1 的强抗碰撞性已于 2005 年被攻破。SHA224、SHA256、 SHA384、SHA512 也都是有 NIST 设计的单向散列函数,他们的散列值长度分别为 224 比特、256 比特、384 比特、512 比特,四种单向散列函数合起来称为 SHA-2,SHA-2 目前还尚未被攻破。

那么在实际应用中,是不是强度越高越好?笔者认为不一定,毕竟生成的信息摘要的位数越多,其需要的计算能力越多,需要存储生成的信息摘要的空间要求越大,如果是一个自己的小型的、临时的应用,MD4/MD5 生成的安全摘要已完全够用,但是如果是需要暴露于公网,且牵涉到一些财产生命安全相关的领域,当然肯定是选用安全级别更高的 SHA-2 生成的信息摘要。

密码学相关的算法

OpenSSL 不但有和管理生成 SSL 证书相关的命令,更令人惊艳的是其还是一个密码学方面的专家工具箱,其提供了非常多的密码学相关的工具函数,如下。

enter image description here

大家比较常见的就是 RC(是一种对称加密,加密的密钥流和明文一样长,同样的密钥和同样的长度能确定同一个密钥流),DES(一种将 64 比特的明文加密成 64 比特的密文的对称加密算法),AES(Advanced Encryption Standard,在密码学中又称 Rijndael 加密法,是美国联邦政府采用的一种区块加密标准),BASE64(一种把二进制加密成为 ASCII 字符),CBC(CBC 模式由 IBM 发明与 1976 年,在 CBC 模式中,每个明文块先与前一个密文块进行异或后,再进行加密)等算法。感兴趣的读者可以自行百度或者 Google,网上的资料比较多,这里就不再赘述了。

OpenSSL 安装

如果读者用的是 Linux 操作系统,恭喜你,一般的 Linux 操作系统都会自带 OpenSSL 工具,你所需要确认的就是其当前是否安装的是最新版本,如果你用的是 Windows 操作系统,也不用担心,OpenSSL 也提供了 Windows 版本的安装程序,本文就以 Windows 操作系统为例子,和大家分享一下如何安装 OpenSSL。

下载地址详见这里

enter image description here

OpenSSL 支持 32 位和 64 位,这个需要根据自己系统的实际情况选择,这里我下载的是 Win64 OpenSSL v1.1.0g 进行安装。

enter image description here

下载完成之后就可以进行安装了。

enter image description here

安装完成后进行环境变量配置,例如 OpenSSL 安装在 C:\OpenSSL-Win64 目录下,则将 C:\OpenSSL-Win64\bin; 复制到 path 中(注意:下图为 Windows10 系统下环境变量配置的配图)。

enter image description here

打开 cmd 命令窗口,输入 openssl version,如果显示版本号,那么恭喜你安装成功,否则安装失败。

enter image description here

OpenSSL 实战操作

因为在后面的章节,比如《如何用 OpenSSL 搭建企业内部 CA 认证中心的根证书?》、《如何用 OpenSSL 搭建 CA 认证中心的中级 CA 证书?》、《三种方法从 HTTPS 网站导出 SSL 证书链》等文章(但不局限于这些文章)都能看到 OpenSSL 的高级用法的身影,所以本部分的 OpenSSL 实战操作将只和大家分享一些基本的 OpenSSL 的操作技能,让大家找到感觉,而不至于在学习后面的课程时,感到一头雾水。请注意,本文的所有例子都在 Windows 操作系统上进行,对于非 Windows 操作系统,其操作命令大同小异。

查看当前的版本和安装位置

有的时候,我们想知道当前安装的 OpenSSL 版本、安装的目录等信息,此时,可以执行下面的命令:openssl version -a。

enter image description here

如上图所示,其显示当前的安装版本是 1.1.0g,安装的目录是 “C:\Program Files\OpenSSL”。

帮助命令

当学习一门新技术时,很多人首先会想它有没有提供一些 help,那 OpenSSL 有没有为我们提供呢? OpenSS 作为一个强大的工具库,答案肯定是有。OpenSSL 为我们提供了 OpenSSL help 这个强大的命令,可以概览 OpenSSL 的所有命令,我们只需要在 cmd 控制台输入 openssl help 即可:

enter image description here

使用 OpenSSL xxx -help 可以查看具体一条命令的用法以及它的参数(注意:xxx 为具体命令),如 OpenSSL md5 -help(下面的截图只显示了部分内容)。

enter image description here

基本的命令

创建一个私钥

通过 openssl help 命令,我们可以知道通过 genrsa 可以生成一个高强度的私钥,如果直接在 openSSL 的控制台输入 genrsa,则其会默认生成一个 2048 位的私钥。

enter image description here

当然,我们也可以指定一些参数,让其输入到指定的文件,比如事先已经创建了一个 c:\openssldemo 的文件夹,然后在 OpenSSL 的环境下执行下面的命令:

genrsa -aes128 -out c:\openssldemo\fd.key 2048

enter image description here

则其会生成一个 fd.key 的私钥,用记事本打开,其内容如下:

-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,B987651EC182D92B45E04A5E2EF12347

Mj1Tfzs9cyOVp8+ZakAJJsmMrlF6R9BDGLvKvTES4UUED5e5Lk13Y9OfUbQuLFdj
D3hJ/RVphex27hyq6JDgZAq8L5Aor5mK7O42h9W7mUzx/liGYNEAFrnSBwOVJpkt
DHGQWV5u3mOFfODyeyYMDIAbbfM5KMRGsz0EERwCflyB2W3iQaoUjAP459C2iN+4
giCsaZ1JamjDKxA1sGCfW/4IWhcMQJ+2Rf9I4SeseYrz//5EJ6xe7ES+WjXLgNxX
tub0NC15zeShDDjP09MgRJwVk75HqMQ4a6h4HSFJoaeh0Ucrq02UeFMfZE0Q+E7h
eS4TiPhhWBhIuUEqPdaRxrFuwOcM8kAGpet4HZT+O6nTgN8knxXNEJU2pr+NeS9n
peE0awfIbfHeojBy4NhocMQmw44JE1YgoUr1ov2X4L8G6l+N0X1nPHrulgxqK5pc
J88L071xCI5ZLn9IYjNjT04xCNmjFNaZw/NiEa21A7mNUJf4hdxm5ocjwM0szAtv
keBlGbNvQhtDX69SVT1z0N3MyFrPApjI0NSQWReShg4ar/+Md7UVf0d4teRKyvkp
0HbOohKCh2pVY7st3isc3RZ2mEX4vHSUPezjPn1XAMvRYPa8ddidvYC/6iLEV/lu
wFjLV3U81V4k6ZxtKTU8fFpa+7wp5bTUe4n+k6cnomdLG21lk0S1o30hV63z8br9
P5NE7nO9IqWP8qlSDu7oDzoy6bTcRTESOjqkj8KPu4KkFYzKzILeKo8BljzwXb7c
BSRe1Zm0aUrHHN7gcZyy/hqPZjEqS+Njp2Uqrn2dPxnEWv+C9RMhIiArJkL6l3Rm
uBFaIqFYws/4+NE0VcihMo98ChpHqkowlohvZBRCkJOCFeBbHbZ8q6oQkk7frddv
MrDVswhSMXqivw+W1HgCVD/6ytuGULRmIExkLxBfEDBIFep8Yi8z2aV6tG27Z22V
mWutCeeqzfRLW1MRCVs1qJN11e2lAtG9GDlKoOjofqAr5SylWUsvxFcaMjHGkzvK
tTrFG/DASwK1H8QcRaY16Q6T8hk41mcJyYHgrljSkEKIcw17OFz4KnNHgq9o2HES
STFjW2l7esv1SdX055r9Hd0o+oxuwc/ai3JO2KJR6XEWzYlVavwA9zuITch6Z9bQ
e+XAReT9A6LjiGhS+SSOAsd9qFeq6/vZl95FfdCoyzFNt2fxpFYlsPk9jmLsvvIr
S2LWaBvegGDpprL0+aRdD4wnpxkmv8nMEtt8S5f0LC/CNxPzn/nPd3TvLowyZ5SC
8ipIB8e7vpr72lTaEIyCkDE/XECBol2R+n2yxE1beakLihJ8eTL+cHLLcUFW8Cj4
lo8YciibLaIsrhBFkEaks8lz9zcXHehBg1bco884UI8e1JfByTgKCcHn8JfNXRTE
ZOSd7Kst7yvSOT2/6OIjECEu3YAv9Jasrky/KBTARUU7uuCcrWT1ZzwpZC22O6DE
jue3emNox9Kl911dsd+heCz9R4t17KXtXEnjeKe0dWwiN7dT/zaGG8X9+6VRjKEz
UZEypdlS4NVaFqkkFKJLltH4g0DSpbgg8WRMzy3pZb8zOiPO0b/nl1IgjPWsoLas
-----END RSA PRIVATE KEY-----

其是一个可以用文本编辑器打开的普通文本文件,其开头的内容显示其是基于 AES 方式进行加密的。中间的私钥的内容是基于 BaseCode 64 编码格式的字符串。

使用 RSA 密码工具查看其私钥的具体信息

上面我们用 genrsa 生成了一个私钥,因为 OpenSSL 也提供了一些密码学的工具,我们可以借助其提供的 RSA 的密码工具,来查看其私钥的相关的信息。

rsa -text -in c:\opensslDemo\fd.key

执行上面的命令后,其会把 fd.key 的具体信息全部列出来,比如模的信息、共有组件、私有组件等,具体信息如下:

Private-Key: (2048 bit)
modulus:
    00:c7:d3:9d:50:22:6d:a3:5e:58:d0:08:b6:63:d2:
    8c:c0:23:36:4f:f9:02:a1:99:1c:eb:48:7c:0a:fd:
    ea:56:db:45:10:4b:ff:7a:5f:31:a4:67:e8:32:91:
    93:68:24:cc:89:cb:88:3c:f9:2a:10:37:95:0b:07:
    f4:34:83:fe:81:c3:8f:f2:bc:a1:5f:7d:7e:fd:d3:
    5e:59:30:8b:59:74:5a:32:8f:8f:6d:2f:b7:56:77:
    f4:70:73:77:e2:8f:09:1a:45:9e:71:01:45:a7:8d:
    da:3d:20:6e:17:f8:96:85:4f:2c:6f:fd:81:3e:27:
    d1:a8:51:6c:3f:ff:e0:8c:47:06:11:e4:bc:f6:6e:
    2b:32:fe:67:4a:9a:e7:13:1e:81:53:b6:2f:e4:cd:
    82:05:c7:2a:1e:e2:c9:3e:f9:a7:df:d2:37:de:62:
    e7:b1:a5:f3:df:6f:18:8d:50:e2:20:32:1a:ea:15:
    eb:6b:f1:d3:a4:cd:9c:8e:6f:cb:22:f2:09:87:0b:
    a6:e2:40:d3:c8:b0:7d:a5:e5:05:44:9d:f6:1f:9e:
    c9:48:02:e7:d7:1f:ae:c1:d4:6e:d7:5a:51:44:41:
    1a:57:3f:5c:68:bb:dd:74:3b:bb:91:2e:68:dd:18:
    c6:a8:db:1a:42:46:8d:23:cc:92:b6:74:92:f0:e1:
    33:e3
publicExponent: 65537 (0x10001)
privateExponent:
    0d:1e:c0:d2:75:20:3b:bc:c3:1a:0d:a8:64:0f:7b:
    fc:55:93:88:56:b2:2c:88:10:15:06:b2:56:4a:6b:
    ab:7e:44:1f:98:cd:d2:6c:13:a7:56:c7:31:22:cb:
    c9:e7:b8:a2:47:81:cf:77:10:a2:f5:f3:4c:41:1e:
    70:a0:46:02:a1:23:7f:6d:91:2e:e2:df:86:ac:ed:
    21:f0:05:06:3f:94:78:83:62:88:69:bc:a0:e9:c9:
    5b:e4:c8:f7:50:2a:e9:d5:ae:5c:7f:17:e2:b3:76:
    a3:d2:d0:47:b4:a3:b5:67:08:64:e6:01:29:62:95:
    ea:76:46:24:41:99:ad:bc:12:5b:25:d5:48:b5:f8:
    7d:6a:cf:4f:88:e0:c7:39:07:bb:a5:3e:40:2f:48:
    f1:8f:66:38:c1:c1:9a:49:e0:c5:d1:0d:4a:d9:22:
    6e:ef:d0:31:4c:bf:1a:41:7d:97:9f:da:b3:2b:5f:
    d3:7a:4d:cc:3c:3e:6f:f3:a2:c4:10:5b:64:74:76:
    b6:50:73:67:6d:5a:b6:8c:3e:e3:98:1b:f7:41:40:
    47:7a:e5:39:f2:0c:13:a3:87:7b:c9:74:10:51:e5:
    84:d3:7d:25:06:87:a2:05:96:84:62:a7:2d:65:ef:
    d7:90:ad:d8:31:a4:8f:4c:5b:d5:c1:62:bc:24:2d:
    d9
prime1:
    00:ea:01:81:60:83:be:ee:a1:56:a7:22:13:d5:88:
    7e:c5:b8:9e:e1:e9:d8:ff:99:8e:34:11:0a:5e:3f:
    9c:02:0e:12:54:89:85:5e:6b:30:d0:5a:c1:bb:89:
    02:72:74:03:74:67:d9:2c:56:02:7f:15:84:3a:2d:
    32:b8:85:47:c5:04:5e:02:7a:ce:19:85:b1:7b:85:
    8a:22:a4:d2:55:25:fb:ba:74:ed:26:ce:15:97:4f:
    36:b7:e8:dd:47:f4:42:c8:dd:6b:22:f6:2d:0d:0c:
    48:8b:b0:c9:e4:23:d5:93:4b:1e:1a:b3:6c:6a:14:
    54:3b:0f:5c:6f:7c:93:4e:ef
prime2:
    00:da:9b:b5:da:4d:b9:56:a9:d9:eb:72:f1:4e:19:
    89:d7:87:0b:0e:1e:52:61:e3:9a:f5:b0:15:cb:32:
    15:c6:ad:87:4d:a6:f0:da:d6:1e:91:74:8e:e0:f9:
    16:1a:e3:3f:1c:5d:1b:e8:06:a3:29:92:cb:56:59:
    bc:f0:d7:6d:05:93:e1:64:39:54:c2:7a:a3:05:f0:
    95:94:47:ec:7e:cd:e5:7a:f0:a4:8e:3c:c8:4a:64:
    8a:22:4c:5f:6a:e5:25:4b:c7:f1:7f:33:df:08:0f:
    1c:fa:92:72:3a:5a:9a:0b:f3:a1:6d:b0:14:74:82:
    a7:74:06:36:08:d4:54:ea:4d
exponent1:
    00:d8:b4:d4:2f:a1:52:6c:83:95:4f:ea:4b:1b:f0:
    f0:16:03:47:80:47:a3:e1:f1:3e:b4:11:23:dc:ec:
    63:79:b3:b6:5d:fb:8d:3b:47:61:49:53:03:1e:bd:
    5f:3a:c7:1d:7b:eb:c0:3f:42:d7:c5:01:14:17:1c:
    4c:60:7d:6d:5d:93:11:cc:92:15:d3:a4:f0:1c:48:
    2b:08:b2:42:e6:ff:ea:03:5e:cd:50:a6:81:70:42:
    b7:95:d1:5d:3b:89:85:5f:a7:4d:d4:6e:ce:81:ca:
    e2:54:1b:40:9c:ba:62:cb:a9:41:13:d1:1d:91:8f:
    8a:01:b7:d4:0e:9a:fb:80:99
exponent2:
    00:cf:d3:d2:ca:4c:b4:13:c8:fc:6d:13:e4:86:ac:
    4e:d8:81:01:28:95:f9:1a:29:09:2b:e4:10:84:12:
    04:93:d2:6b:5c:8e:86:52:75:d7:af:cf:10:fa:9e:
    b3:be:32:26:d0:af:50:15:81:21:e3:27:34:7a:ce:
    6b:8a:c8:33:54:67:27:93:61:d1:cb:e6:4d:50:1b:
    4e:09:1f:6b:9d:8d:df:49:c6:b7:9a:a5:fc:80:85:
    1e:b1:c6:cb:bb:d3:47:66:c9:1a:35:25:3a:36:ee:
    2f:4d:a4:a6:46:05:d6:87:e0:41:ab:07:08:1b:50:
    0f:24:85:b7:1f:23:c5:ea:cd
coefficient:
    4e:a7:e6:d4:bc:0d:ab:88:12:45:a0:6f:aa:cb:f9:
    3a:c0:2f:b5:9f:8b:4d:15:a0:5f:a5:9d:de:57:80:
    9a:0e:5f:1b:11:0d:cd:71:6b:11:83:ca:31:e4:9a:
    26:3f:75:02:f7:8e:4e:c7:de:06:98:45:5a:d8:e7:
    d8:84:41:b2:d1:62:06:81:0c:61:29:4f:e1:a6:e8:
    d5:bf:55:32:52:60:f1:2c:f2:5c:47:f8:76:75:79:
    5e:26:5a:66:bd:dd:ed:92:50:0e:44:6a:7b:f2:51:
    0c:99:0f:f0:ae:ea:c7:3f:63:b8:22:df:1c:90:38:
    97:b4:18:4d:2d:4b:4b:ae

绝对是研究 RSA 算法的一个非常得力的工具。

创建一个证书请求

我们在配置网站的时候,可能需要为网站创建一个 SSL 的证书请求,那么用 OpenSSL 应该如何做呢?其实很简单,因为 OpenSSL 就有一个 req 的命令,专门用来创建证书请求。需要注意的是,在创建一个 SSL 的证书请求前,先要创建一个私钥来,我们可以直接使用上面的私钥,通过 -key 的参数 c:\openSSLDemo\fd.key 来指定,然后通过 -out 的参数指定其输出的文件路径。

openssl req -new -key c:\openSSLDemo\fd.key -out c:\openSSLDemo\fd.csr

中途需要输入你的包含私钥 c:\openSSLDemo\fd.key 的密码,然后再需要你输入证书的基本信息,比如国家、地区、城市、组织、通用名、邮箱地址等,比如下面我的申请。

OpenSSL> req -new -key c:\openSSLDemo\fd.key -out c:\openSSLDemo\fd.csr
Enter pass phrase for c:\openSSLDemo\fd.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:cn
State or Province Name (full name) [Some-State]:shannxi
Locality Name (eg, city) []:xian
Organization Name (eg, company) [Internet Widgits Pty Ltd]:51talkdocter
Organizational Unit Name (eg, section) []:it
Common Name (e.g. server FQDN or YOUR name) []:openssldemo
Email Address []:chancein007@163.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:123456
An optional company name []:
OpenSSL>

证书请求生成后,可以通过下面的命令查看生成的证书请求。

 req -text -in c:\opensslDemo\fd.csr -noout

其中,-text 表示已文本的方式查看,-in 后面需要知道待查看的证书的请求的路径,-noout 表示不输出其已经被编码的证书文本本身,下面为命令执行结果的输出。

OpenSSL> req -text -in c:\opensslDemo\fd.csr -noout
Certificate Request:
    Data:
        Version: 1 (0x0)
        Subject: C = cn, ST = shannxi, L = xian, O = 51talkdocter, OU = it, CN =
 openssldemo, emailAddress = chancein007@163.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c7:d3:9d:50:22:6d:a3:5e:58:d0:08:b6:63:d2:
                    8c:c0:23:36:4f:f9:02:a1:99:1c:eb:48:7c:0a:fd:
                    ea:56:db:45:10:4b:ff:7a:5f:31:a4:67:e8:32:91:
                    93:68:24:cc:89:cb:88:3c:f9:2a:10:37:95:0b:07:
                    f4:34:83:fe:81:c3:8f:f2:bc:a1:5f:7d:7e:fd:d3:
                    5e:59:30:8b:59:74:5a:32:8f:8f:6d:2f:b7:56:77:
                    f4:70:73:77:e2:8f:09:1a:45:9e:71:01:45:a7:8d:
                    da:3d:20:6e:17:f8:96:85:4f:2c:6f:fd:81:3e:27:
                    d1:a8:51:6c:3f:ff:e0:8c:47:06:11:e4:bc:f6:6e:
                    2b:32:fe:67:4a:9a:e7:13:1e:81:53:b6:2f:e4:cd:
                    82:05:c7:2a:1e:e2:c9:3e:f9:a7:df:d2:37:de:62:
                    e7:b1:a5:f3:df:6f:18:8d:50:e2:20:32:1a:ea:15:
                    eb:6b:f1:d3:a4:cd:9c:8e:6f:cb:22:f2:09:87:0b:
                    a6:e2:40:d3:c8:b0:7d:a5:e5:05:44:9d:f6:1f:9e:
                    c9:48:02:e7:d7:1f:ae:c1:d4:6e:d7:5a:51:44:41:
                    1a:57:3f:5c:68:bb:dd:74:3b:bb:91:2e:68:dd:18:
                    c6:a8:db:1a:42:46:8d:23:cc:92:b6:74:92:f0:e1:
                    33:e3
                Exponent: 65537 (0x10001)
        Attributes:
            challengePassword        :123456
    Signature Algorithm: sha256WithRSAEncryption
         96:55:bf:04:57:1e:33:2d:87:75:b7:db:d6:e0:d9:82:00:0f:
         39:67:aa:ce:88:d1:9e:03:37:66:cd:d5:39:ce:39:d8:a9:40:
         38:8f:15:5e:cf:54:e6:8c:64:3b:21:b0:01:7e:1e:e5:6a:6c:
         49:66:8d:0f:e8:bc:f3:c2:bb:1a:11:48:65:dd:01:c3:01:fe:
         c0:e6:12:e2:f9:ae:2c:d2:ef:57:a2:e0:9c:78:46:ab:5b:c2:
         fe:15:e3:6c:91:ee:97:be:dd:17:30:41:a4:b0:b5:d9:92:d6:
         81:37:b2:68:88:bc:35:ef:a6:f8:6e:94:7e:af:c3:8d:25:02:
         42:c7:77:6a:3c:ce:d3:77:3d:27:5a:b0:32:32:98:e9:2f:3c:
         60:f1:f8:c8:56:af:43:08:f1:70:87:ce:87:84:0f:ed:28:ea:
         bb:31:50:74:82:11:62:f3:53:c0:99:a2:f5:65:ab:cd:81:3a:
         21:b8:24:34:81:87:d9:5a:ee:29:1a:88:14:26:47:ad:29:45:
         30:87:2d:a6:08:75:67:bc:c7:4b:4e:ed:50:c3:de:97:08:aa:
         dc:6b:d6:c4:16:ee:f2:90:2f:9a:66:bb:0e:63:e9:d7:f9:7a:
         75:e6:c1:52:91:53:20:f5:e4:1d:ba:9c:7b:b2:4b:f4:07:d3:
         5e:d6:3d:1b
自签名证书请求

如果你只是安装一个 SSL/TLS 服务器,比如在 IIS 或者 Tomcat 上面部署一个 Web 站点,而且这个站点只是供你自己开发测试使用,这个时候,就没有必要把证书请求发送给第三方的权威的商业 CA 去签名我们的证书请求,最快最方便的方式就是自己签署自己,从而生成一个自签名的 SSL 证书。OpenSSL 已经为我们考虑好了,其命令如下:

x509 -req -days 365 -in c:\openSSLDemo\fd.csr -signkey c:\openSSLDemo\fd.key -out c:\opensslDemo\fd.crt

其中,x509 -req 表示要进行 SSL 证书的自签名了,-days 365 表示自签名的证书的有效期限为 1 年,从刚刚算起;-signkey 表示用的是生成证书请求的私钥,也就是自己给自己签名;-in 表示证书请求的路径,-out 表示生成的自签名证书输出的路径。

运行上面的命令后,生成的 fd.crt 自签名的证书如下:

enter image description here

查看 SSL 证书

证书生成后,我们需要测试或者查看证书,这个时候,就可以使用下面的类似命令了。

x509 -text -in c:\openSSLDemo\fd.crt -noout

其中,-in 参数表示的是需要查看的证书的路径,-noout 表示不输出其已经被编码的证书文本本身,命令的执行结果如下:

OpenSSL> x509 -text -in c:\openSSLDemo\fd.crt -noout
Certificate:
    Data:
        Version: 1 (0x0)
        Serial Number:
            c5:b0:94:8e:17:72:79:d1
    Signature Algorithm: sha256WithRSAEncryption
        Issuer: C = cn, ST = shannxi, L = xian, O = 51talkdocter, OU = it, CN =
openssldemo, emailAddress = chancein007@163.com
        Validity
            Not Before: Mar 18 16:58:52 2018 GMT
            Not After : Mar 18 16:58:52 2019 GMT
        Subject: C = cn, ST = shannxi, L = xian, O = 51talkdocter, OU = it, CN =
 openssldemo, emailAddress = chancein007@163.com
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:c7:d3:9d:50:22:6d:a3:5e:58:d0:08:b6:63:d2:
                    8c:c0:23:36:4f:f9:02:a1:99:1c:eb:48:7c:0a:fd:
                    ea:56:db:45:10:4b:ff:7a:5f:31:a4:67:e8:32:91:
                    93:68:24:cc:89:cb:88:3c:f9:2a:10:37:95:0b:07:
                    f4:34:83:fe:81:c3:8f:f2:bc:a1:5f:7d:7e:fd:d3:
                    5e:59:30:8b:59:74:5a:32:8f:8f:6d:2f:b7:56:77:
                    f4:70:73:77:e2:8f:09:1a:45:9e:71:01:45:a7:8d:
                    da:3d:20:6e:17:f8:96:85:4f:2c:6f:fd:81:3e:27:
                    d1:a8:51:6c:3f:ff:e0:8c:47:06:11:e4:bc:f6:6e:
                    2b:32:fe:67:4a:9a:e7:13:1e:81:53:b6:2f:e4:cd:
                    82:05:c7:2a:1e:e2:c9:3e:f9:a7:df:d2:37:de:62:
                    e7:b1:a5:f3:df:6f:18:8d:50:e2:20:32:1a:ea:15:
                    eb:6b:f1:d3:a4:cd:9c:8e:6f:cb:22:f2:09:87:0b:
                    a6:e2:40:d3:c8:b0:7d:a5:e5:05:44:9d:f6:1f:9e:
                    c9:48:02:e7:d7:1f:ae:c1:d4:6e:d7:5a:51:44:41:
                    1a:57:3f:5c:68:bb:dd:74:3b:bb:91:2e:68:dd:18:
                    c6:a8:db:1a:42:46:8d:23:cc:92:b6:74:92:f0:e1:
                    33:e3
                Exponent: 65537 (0x10001)
    Signature Algorithm: sha256WithRSAEncryption
         2c:e4:5e:a3:ba:83:75:55:8e:44:98:02:1d:f2:88:19:3d:3e:
         07:e8:50:72:1b:55:ea:de:69:c2:ae:ac:ab:71:28:ff:ce:d0:
         36:2f:d0:c9:2d:6d:ba:de:b5:9f:71:02:21:59:1d:4d:a2:56:
         a4:0b:c4:54:40:a4:6e:59:b4:48:9f:82:a0:01:6f:dd:3e:fd:
         0c:e7:51:86:11:cc:b3:f2:48:15:1c:3f:19:3e:26:a7:ef:3b:
         3c:a3:7b:e0:84:11:ff:18:82:8d:d1:6d:fb:07:06:ad:a7:c1:
         7b:91:0f:13:46:47:6e:4c:4d:eb:16:1a:a3:61:59:89:be:b7:
         b3:19:b6:2c:e6:24:61:8e:94:42:a0:68:f7:45:1e:63:36:9d:
         ce:81:c2:45:3d:d2:71:23:07:68:25:e1:0f:69:57:54:86:a5:
         a9:b4:41:d7:9c:0d:be:4d:10:c4:3b:91:1a:9b:21:a5:62:22:
         b3:98:72:6e:2e:6b:9d:e4:ed:d6:3f:43:09:31:70:3f:cb:a3:
         9e:2b:29:6b:73:dd:48:43:07:ec:d8:2c:5f:ef:1a:87:17:ed:
         6c:6e:6d:08:8c:2d:a8:3c:0c:9b:46:e0:5c:fe:c1:6d:42:91:
         44:2e:fb:68:3d:0b:83:b2:6c:7b:69:42:2b:cb:bd:3b:f3:ab:
         03:de:4d:6c
OpenSSL>

总结

本篇文章首先阐述了 OpenSSL 工具的作用,其主要是用来管理 SSL 证书的,但是也提供了非常有用的密码学工具箱,用于密码学测试验证。紧接着,和大家分享了如何安装 OpenSSL,特别是在 Windows 操作系统上,并以 Windows 操作系统为平台,在上面根据不同的假设场景,实战演练了一把。

知易行难,如果读者能够仿照上面的实战步骤,一一执行一下,我想不仅能够加深印象,而且能够对其基本的命令操作方式找到一种感觉,从而能够举一反三。限于笔者水平,如果有错误或者理解不当之处,请与我联系改正,最后祝大家学习愉快,收获良多。

上一篇
下一篇
目录