openssl 自签名证书 - 制作证书(二)

【上一篇:openssl 自签名证书 - 安装openssl(一)】

事前准备

相关:
pem、key:私钥文件,对数据进行加密解密
csr:证书签名请求文件,将其提交给证书颁发机构(ca、CA)对证书签名
crt:由证书颁发机构(ca、CA)签名后的证书或者自签名证书,该证书包含证书持有人的信息、持有人的公钥以及签署者的签名等信息
关于证书相关格式转换本文不做介绍


终端输入命令:vim /usr/local/openssl/ssl/openssl.cnf,根据自己具体的安装路径查找openssl的默认配置文件即可,部分内容如下图显示:

openssl 自签名证书 - 制作证书(二)_第1张图片
openssl默认配置部分截图

dir:默认的ssl工作目录,可以修改默认目录,这里是安装完默认的
certs:存放已经签发的证书
newcerts:存放CA新生成的证书
private:存放私钥
crl:存放已经吊销的证书
index.txt:已签发证书的文本数据库文件
serial:序列号存储文件,序列号为16进制数存储供证书签发使用序列号做参考
.rand:私有随机文件,
生成随机数命令:openssl rand -out xxx/.rand 1024
1024表示随机数长度
在生成证书的临时目录里创建默认配置目录文件命令,一键梭哈:
mkdir -p ./demoCA/certs; mkdir -p ./demoCA/crl; mkdir ./democA/newcerts; mkdir -p ./demoCA/private; touch ./demoCA/index.txt; touch ./demoCA/serial; echo 01 > ./demoCA/serial;


创建自己生成证书的临时文件夹:mkdir ~/Desktop/openssl_ssl
进入文件夹:cd ~/Desktop/openssl_ssl,然后将之前提到过得【openssl.cnf】文件复制到此,开始制作证书用于之后的socket编程里

1. 制作ca根证书

1.1 生成ca根证书私钥

openssl genrsa -aes256 -out ca.key 2048

genrsa:使用RSA算法生成私钥
-aes256:使用256位密钥的AES算法对私钥进行加密
-out:输出文件路径
2048:私钥长度
输入完命令会让你输入两遍私钥文件的密码

1.2 生成ca根证书请求文件

openssl req -new -key ca.key -out ca.csr

req:执行证书签发命令
-new:新的证书签发请求
-key:指定私钥文件的路径
-out:csr文件的输出路径
输入完命令会让你输入ca根证书私钥的密码并填写一些信息,如下所示:
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 【国家代码两个字母可为空,ca、server、client要一致】
State or Province Name (full name) [Some-State]:【省份,ca、server、client要一致】
Locality Name (eg, city) []:【城市】
Organization Name (eg, company) [Internet Widgits Pty Ltd]:【公司名,ca、server、client要一致】
Organizational Unit Name (eg, section) []:【组织名】
Common Name (e.g. server FQDN or YOUR name) []:【不可为空,全限定域名或名字】
Email Address []:【邮箱】

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:【输入密码】
An optional company name []:【可选的公司名】

上面输入的ca请求信息在后续申请使用该ca证书签名的请求证书要保证一致。

1.3自己作为ca机构签发根证书(自签发证书)

openssl x509 -req -days 365 -signkey ca.key -in ca.csr -out ca.crt

x509:用于自签名证书,生成x509格式的证书
-req:请求签名
-days:证书有效期
-signkey:证书签发的私钥
-in:证书请求文件,有效的文件路径
-out:ca签名后的证书输出路径

2. 制作server端证书

用刚才的ca证书为使用端签发证书

2.1 生成server端私钥

openssl genrsa -aes256 -out server.key 2048
连续输入两次密码

2.2 生成server端证书请求文件

openssl req -new -key server.key -out server.csr
同样的会让你输入刚才私钥的密码,并填写和ca根证书请求文件一样的信息,两者要保持一样

2.3 使用ca根证书为server端签发证书

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

-in:输入证书签名请求文件
-out:签名后的证书输出路径
-cert:ca根证书
-keyfile:ca根证书私钥文件
-config:配置文件

3 制作client端证书

套路和server端基本是一样的,下面就直接上命令了

3.1 生成client端私钥

openssl genrsa -aes256 -out client.key 2048

3.2 生成client端证书请求文件

openssl req -new -key client.key-out client.csr

3.3 使用ca根证书为client端签发证书

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key -config openssl.cnf

文件变化:1. index.txt本地数据库文本文件多了两条信息、2. serial序列号文件的序列号递增了、3. newcerts文件夹多了两个证书、4. 其它...

到这里我们就可以结束了,我们已经得到了ca.crt、server.key、server.crt、client.key、client.crt,我们就可以开始编程了。
双向认证要保证server、client端证书签名的ca要一样或者期限没有过期否则会认证失败

【下一篇:openssl 自签名证书 - socket编程应用(三)】


4. 导出证书

4.1 导出server端证书

导出时会让你输入server端私钥的密码,即server-key.pem的密码,验证通过后再输入两次证书导出的密码
openssl pkcs12 -export -clcerts -name server-p12 -inkey server.key -in server.crt -out server-p12.keystore

4.2 导出client端证书

导出同server操作是一样的,先输入client-key.pem的密码,在输入两次证书导出的密码
openssl pkcs12 -export -clcerts -name client-p12 -inkey client.key -in client.crt -out client-p12.keystore

4.3 导出受信任的证书

keytool -importcert -trustcacerts -alias localhost -file ca-crt.cer -keystore ca-trust.keystore

终端显示:

输入密钥库口令:
再次输入新口令:
所有者: EMAILADDRESS=【邮箱地址】, CN=127.0.0.1, OU=【组织名】, O=【公司】, L=【市】, ST=【省份】, C=cn【国家代码】
发布者: EMAILADDRESS=【邮箱地址】, CN=127.0.0.1, OU=【组织名】, O=【公司名】, L=【市】, ST=【省份】, C=cn【国家代码】
序列号: 4272b0ce733*************316f20cfe5f6a182
生效时间: Mon Jan 28 11:12:17 CST 2019, 失效时间: Tue Jan 28 11:12:17 CST 2020
证书指纹:
SHA1: C1:B6:C6:B3:95:8F:3C:12:B8:C4:AB:5E:8B:0D:03:6B:6D:B2:1E:D3
SHA256: 31:BF:B7:EA:F3:72:E9:28:95:55:41:76:F0:7B:24:19:2B:FF:C7:C4:AA:AE:63:EF:6C:98:69:5A:49:37:56:3F
签名算法名称: SHA256withRSA
主体公共密钥算法: 2048 位 RSA 密钥
版本: 1
是否信任此证书? [否]: y【终端输入y/n】
证书已添加到密钥库中

现在就可以使用ca证书,server端证书和私钥,client端证书和私钥开始socket编程了...

【下一篇:openssl 自签名证书 - socket编程应用(三)】

你可能感兴趣的:(openssl 自签名证书 - 制作证书(二))