使用OpenSSL生成整套证书流程,使用的是windows上git安装好之后的openssl工具。

1
2
3
4
5
.key格式:私有的密钥  
.csr格式:证书签名请求(证书请求文件),含有公钥信息,certificate signing request的缩写  
.crt格式:证书文件,certificate的缩写  
.crl格式:证书吊销列表,Certificate Revocation List的缩写  
.pem格式:用于导出,导入证书时候的证书的格式,有证书开头,结尾的格式

ca根证书:

生成CA私钥(.key)–>生成CA证书请求(.csr)–>自签名得到根证书(.crt)(CA给自已颁发的证书)。

1
2
3
4
5
6
1. # Generate CA private key   
2. openssl genrsa -out ca.key 2048   
3. # Generate CSR   
4. openssl req -new -key ca.key -out ca.csr  
5. # Generate Self Signed certificateCA 根证书)  
6. openssl x509 -req -days 365 -in ca.csr -signkey ca.key -out ca.crt  

用户证书生成步骤: 生成私钥(.key)–>生成证书请求(.csr)–>用CA根证书签名得到证书(.crt)

服务器端用户证书:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
1. # private key  
2. $openssl genrsa -des3 -out server.key 1024   
3. # generate csr  
4. $openssl req -new -key server.key -out server.csr  
5. # generate certificate  
6. $openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key 

Organization Name (eg, company) [Internet Widgits Pty Ltd]: ca,服务端,客户端写成不一样即可

Common Name (e.g. server FQDN or YOUR name) []: 填写生成证书的域名
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
客户端证书:

1. $openssl genrsa -des3 -out client.key 1024   
2. $openssl req -new -key client.key -out client.csr  
3. $openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key  

生成pem格式证书:   
有时需要用到pem格式的证书,可以用以下方式合并证书文件(crt)和私钥文件(key)来生成 

$cat client.crt client.key> client.pem 
$cat server.crt server.key > server.pem

结果:

服务端证书:ca.crt, server.key, server.crt, server.pem
客户端证书:ca.crt, client.key, client.crt, client.pem

注意:

在执行$openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key时可能会出错:

Using configuration from /usr/share/ssl/openssl.cfg I am unable to access the ./demoCA/newcerts directory ./demoCA/newcerts: No such file or directory 

解决方法:

1
2
3
4
1)mkdir -p ./demoCA/newcerts   
2)touch demoCA/index.txt   
3)touch demoCA/serial   
4)echo 01 > demoCA/serial

其实都是openssl.cnf文件里面配置的,修改一下配置文件也可以。 另外下面看到一个开源项目是基于OpenSSL做流量过滤的

https://github.com/kazkansouh/mitm-ssl

另外还找到一个专业做这方面的工具,这个还需要再研究一下,mitmproxy是专业工具,相比Fiddler Charles可以看到SSL包的更多细节。

https://mitmproxy.org/

如果要调试OpenSSL的SSL流程可以使用以下命令

openssl  s_client -debug -connect joenchen.com:443 -state -showcerts -tlsextdebug -msg                                                                 

参考文章
https://blog.csdn.net/moonhillcity/article/details/52768218
https://coolcao.com/2018/08/06/https/
https://blog.cloudflare.com/keyless-ssl-the-nitty-gritty-technical-details/