OpenSSL简介
官网:https://www.openssl.org/source/
是目前最流行的SSL密码库工具,提供了一个通用、健壮、功能完备的工具套件,用以支持SSL/TLS协议的实现
主要构成:密码算法库、密钥和证书封装管理功能、SSL通信API接口
主要用途:
1、建立RSA、DH、DSA key参数
2、建立X.509证书、证书签名请求(CSR)和CRLs(证书回收列表)
3、计算消息摘要
4、使用各种Cipher加密、解密
5、SSL/TLS客户端以及服务器的测试
6、处理S/MIME或者加密邮件
RSA密钥操作
私钥无密码默认加密方式
1
2
3
4
|
生成RSA私钥(无加密)
[root@master1 pki]# openssl genrsa -out rsa_private.key 2048
根据私钥生成对应的公钥
[root@master1 pki]# openssl rsa -in rsa_private.key -pubout -out rsa_public.key
|
私钥有密码使用aes256加密方式
1
2
3
4
5
6
7
8
|
生成私钥
[root@master1 pki]# openssl genrsa -aes256 -passout pass:111111 -out rsa_aes_private.key 2048
其中passout代替shell进行密码输入,否则会提示输入密码,固定格式
pass:密码
此时生成公钥会需要密码
[root@master1 pki]# openssl rsa -in rsa_aes_private.key -passin pass:111111 -pubout -out rsa_aes_public.key
其中使用passin 代替了shell进行密码输入
|
转换命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
加密私钥转非加密私钥
[root@master1 pki]# openssl rsa -in rsa_aes_private.key -passin pass:111111 -out rsa_aes_private_new.key
非加密私钥转换为加密私钥
[root@master1 pki]# openssl rsa -in rsa_aes_private_new.key -aes256 -passout pass:111111 -out rsa_aes_private_new1.key
PEM格式的私钥转DER格式
[root@master1 pki]# openssl rsa -in rsa_private.key -outform DER -out rsa_private.der
DER格式的私钥转PEM格式
[root@master1 pki]# openssl rsa -in rsa_private.der -inform DER -outform pem -out rsa_private1.pem
-inform 参数指定输入的格式,-outform 参数指定输出的格式
查看私钥明细
[root@master1 pki]# openssl rsa -in rsa_private1.pem -noout -text
查看公钥明细
[root@master1 pki]# openssl rsa -pubin -in rsa_public.key -noout -text
私钥PKCS#1转PKCS#8
[root@master1 pki]# openssl pkcs8 -topk8 -in rsa_private.key -passout pass:111111 -out pkcs8_private.key
其中-passout 指定了密码,输出的pkcs8格式秘钥为加密形式,默认采用des3加密算法,内容如下
-----BEGIN ENCRYPTED PRIVATE KEY-----
BASE64 ENcoded Data
-----END ENCRYPTED PRIVATE KEY-----
可以使用-nocrypt参数可以输出无加密的pkcs8秘钥
[root@master1 pki]# openssl pkcs8 -topk8 -in rsa_private.key -passout pass:111111 -nocrypt
输出格式如下
-----BEGIN PRIVATE KEY-----
BASE64 ENcoded Data
-----END PRIVATE KEY-----
|
生成自签名证书
生成RSA私钥和自签名证书
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
[root@master1 pki]# openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 3650 -out ca.crt
参数讲解
req是证书请求的子命令
-newkey rsa:2048 -keyout ca.key 表示生成私钥(PKCS8格式)
-nodes 表示私钥不加密,若不带此参数,将提示输入密码
-x509 表示输出证书
-days 3650 表示证书有效期,这里有效期为10年
此后提示输入证书拥有者信息:
若执行自动输入,可使用-subj 选项,如下
[root@master1 pki]# openssl req -newkey rsa:2048 -nodes -keyout ca.key -x509 -days 3650 -out ca.crt -subj "/C=CN/ST=GD/L=SZ/O=lingcb/OU=DEV/CN=lingcb.com/emailAddress=xieys@lingcb.com"
C 国家 ST 省份 L 城市 O 公司 OU 部门 CN 名字 emailAddress邮箱地址
其中CN(公用名称 Common Name) 简称CN字段,对于SSL证书,一般为网站域名;对于代码签名证书则为申请者单位名称;对于客户端证书则为证书申请者的姓名
|
使用已有的RSA私钥生成自签名证书
1
2
3
|
[root@master1 pki]# openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
参数讲解
-new 指生成证书请求,加上-x509表示直接输出证书,-key 指定私钥文件
|
生成签名请求以及CA签名
使用RSA私钥生成CSR签名请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
创建RSA 私钥
[root@master1 pki]# openssl genrsa -aes256 -passout pass:111111 -out server.key 2048
通过私钥生成csr签名请求
[root@master1 pki]# openssl req -new -key server.key -passin pass:111111 -out server.csr -subj "/C=CN/ST=GD/L=SZ/O=lingcb/OU=dev/CN=www.lingcb.com"
此时生成的csr签名请求文件可提交至CA进行签发
查看csr文件的细节
[root@master1 pki]# cat server.csr
-----BEGIN CERTIFICATE REQUEST-----
MIICpDCCAYwCAQAwXzELMAkGA1UEBhMCQ04xCzAJBgNVBAgMAkdEMQswCQYDVQQH
DAJTWjEPMA0GA1UECgwGTGluZ2NiMQwwCgYDVQQLDANkZXYxFzAVBgNVBAMMDnd3
dy5saW5nY2IuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2JC/
OMexNU39ChWipdlI42a102rK3ah0ZaA+upvRl4RIlBiyxz6cuVnYUI765yodGigK
n2DCP2YDvK6fDOfW4nY7fVvbyv8f8fSkkQLz12n90tRRkAcaSqISU841VI9U0s84
gZFLWbGb8Y/IDeBUvcGYeDnBcbkpCAv24xZg4HhbzIVTjrDv5Sy1GwaPq7v3lon4
nXqnBtJ/+us70GJa9uq0XZcO0xBdo47Rrx05+gSzvwHRvGv7WPrvvwQnohcssFsl
gnFNby6jaazPUsgHSAiY7klL3wLZyehLScG0nHbyUFi81/9sdb1bF2bh1o0QxZYC
kIHN8rOLA4Yft7ThIQIDAQABoAAwDQYJKoZIhvcNAQELBQADggEBAHoXvSEbq+0t
UjZvY+oFDNz6Jt23QKQifbEEz+sc58BfxRPWSVrSiMzYl2N4+jsZTZLW7HLcKlMU
wXb4VJbEnezuwFRiqc3s4L0OY79Zn2C2otbFzApfXRWshZAKuLeYgMfYZfaqf/le
e07JJzSCl2VvM81j58DCqUIl/ur1c23c+A/nSFp0fXIakIDP3KLY632UNefWpyJB
HnXOwfajjpVWmRPFXID+w4N/wNQJaTMZhACAqyeHXibNZNHO4YLf3Th0knlhAOuL
QiniJQaobMyje8gb8gUC0qxDkEP+wlJLaEmeUq+SDR+J+45qYmwuiXp9EG5lTKN7
I1PbVDyG+AU=
-----END CERTIFICATE REQUEST-----
[root@master1 pki]# openssl req -noout -text -in server.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=CN, ST=GD, L=SZ, O=lingcb, OU=dev, CN=www.lingcb.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
....
使用CA证书以及CA秘钥 对请求签发证书进行签发,生成x509证书
[root@master1 pki]# openssl x509 -req -days 3650 -in server.csr -CA ca.crt -CAkey ca.key -passin pass:111111 -CAcreateserial -out server.crt
其中参数CAXXX 适用于CA参数输入
查看证书细节
[root@master1 pki]# openssl x509 -in server.crt -noout -text
|
查看证书目录下的证书对应的域名
1
2
3
4
5
6
7
|
[root@Haproxy01 ~]# cat s.sh
#!/bin/bash
for i in `ls /etc/haproxy/T`
do
echo $i && openssl x509 -in $i -noout -text | grep 'Subject: CN='
done
|