HTTPS心得笔记之OpenSSL生成root CA及签发证书

在https学习笔记二,已经弄清了数字证书的概念,组成和在https连接过程中,客户端是如何验证服务器端的证书的。这一章,主要介绍下如何使用openssl库来创建key file,以及生成root CA及签发子证书。学习主要参考官方文档:https://www.feistyduck.com/library/openssl-cookbook/online/ch-openssl.html#

一、openssl 简介

openssl 是目前最流行的 SSL 密码库工具,其提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS 协议的实现。官网:https://www.openssl.org/source/,其中有3个主要的用途:1、密码算法库(建立 RSA、DH、DSA key 参数,计算消息摘要,使用各种 Cipher加密/解密) 2、密钥和证书封装管理功能(建立 X.509 证书、证书签名请求(CSR)和CRLs(证书回收列表));3、SSL通信API接口(SSL/TLS 客户端以及服务器的测试,处理S/MIME 或者加密邮件)。

二、安装openssl(linux CentOS7 32位)

如果使用的是unix操作系统,可能安装系统的时候,这个库就已经有且存在了。但是在使用前,需要注意下当前openssl的库的版本。   

openssl version
OpenSSL 1.0.1 14 Mar 2012

因为版本1.0.1是一个很重要的风水岭版本。因为1.0.1是第一个支持TLS1.1和1.2的版本。支持新的协议。操作系统的选择也很重要,比如Ubuntu 12.04 LTS,客户端不支持SSL2。这里安装以CentOS7系统为例:

A、 下载openssl库文件:https://www.openssl.org/source/ 

B、将下载的压缩包放在根目录下,解压缩,进入解压缩文件(得到openssl-openssl-1.0.0文件夹)cd openssl-1.0.0

C、编译前配置openssl,执行命令:./config --prefix=/usr/local/openssl,其中 ( --prefix )参数为欲安装之目录,也就是安装后的档案会出现在该目录下。

D、编译openssl,执行命令: make install

小插曲:安装openssl报错

1、问题描述:安装完成,查看版本信息的时候报错了,缺少一个库文件libssl.so.1.1。
[root@b6e4cbd27773 /usr/local/openssl/bin]# openssl version
      openssl: error while loading shared libraries: libssl.so.1.1: cannot open shared

object file: No such file or directory
2、解决方法:有依赖没装libssl。在/etc/ld.so.conf文件中写入openssl库文件的搜索路径,使用修改后的conf生效即可:
echo "/usr/local/lib64" >> /etc/ld.so.conf
ldconfig -v

三、使用openssl生成RSA密钥对

使用openssl的私钥产生公钥前,需要了解以下几点:

1、key算法:openssl 支持生成RSA,DSA,ECDSA的密钥对,但是RSA是目前使用最普遍的。

2、Key长度:RSA的2048是公认较比较安全的key长度。

3、密码(Passphrase):在key上使用密码是一个可选值,但是一般都是强烈建议的(官网这样写的,实际项目中很多都没有设置口令),这样每次使用key文件时,都需要输入这个密码才能使用,增强了其安全性,但是随之而来的易用性也会变差。 

使用genrsa命令来生成RSA key( 产生DSA其他算法的key文件,可以直接参考学习官网教程,在此处以常用的为例),2步骤能完成:

A、生成私钥:

使用命令:openssl genrsa -aes128 -out fd.key 2048 。以下输入了为这个key值设置了密码,且密码使用aes128加密保存。

openssl genrsa -aes128 -out fd.key 2048
Generating RSA private key, 2048 bit long modulus
....+++
...................................................................................+++
e is 65537 (0x10001)
Enter pass phrase for fd.key: ****************
Verifying - Enter pass phrase for fd.key: ****************

这个key文件就是私钥文件。可以查看下文件内容:

cat fd.key
-----BEGIN RSA PRIVATE KEY-----
Proc-Type: 4,ENCRYPTED
DEK-Info: AES-128-CBC,01EC21976A463CE36E9DB59FF6AF689A

vERmFJzsLeAEDqWdXX4rNwogJp+y95uTnw+bOjWRw1+O1qgGqxQXPtH3LWDUz1Ym
mkpxmIwlSidVSUuUrrUzIL+V21EJ1W9iQ71SJoPOyzX7dYX5GCAwQm9Tsb40FhV/
[21 lines removed...]
4phGTprEnEwrffRnYrt7khQwrJhNsw6TTtthMhx/UCJdpQdaLW/TuylaJMWL1JRW
i321s5me5ej6Pr4fGccNOe7lZK+563d7v5znAx+Wo1C+F7YgF+g8LOQ8emC+6AVV
-----END RSA PRIVATE KEY-----     

B、生成公钥:

使用命令:openssl rsa -in fd.key -pubout -out fd-public.key

openssl rsa -in fd.key -pubout -out fd-public.key
Enter pass phrase for fd.key: ****************

查看这个key文件,就是公钥:

cat fd-public.key
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnlccwQ9FRyJYHM8sFNsY
PUHJHJzhJdwcS7kBptutf/L6OvoEAzCVHi/m0qAA4QM5BziZgnvv+FNnE3sgE5pz
iovEHJ3C959mNQmpvnedXwfcOIlbrNqdISJiP0js6mDCzYjSO1NCQoy3UpYwvwj7
0ryR1F+abARehlts/Xs/PtX3VamrljiJN6JNgFICy3ZvEhLZEKxR7oob7TnyZDrj
IHxBbqPNzeiqLCFLFPGgJPa0cH8DdovBTesvu7wr/ecsf8CYyUCdEwGkZh9DKtdU
HFa9H8tWW2mX6uwYeHCnf2HTw0E8vjtOb8oYQxlQxtL7dpFyMgrpPOoOVkZZW/P0
NQIDAQAB
-----END PUBLIC KEY-----

三、获取权威机构颁发证书步骤

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/01493195a259d9ba2f5248b6db38fb56.html