从自签名证书到wireshark解密https

一 背景

以前使用库写过一个https的特定算法的解密,整个测试过程比较麻烦,这边记录下测试准备内容.

二 生成自签名证书

HTTPS正常情况下使用的证书都是由CA结构颁发的,浏览器内置了根证书,这样我们在访问网站的时候通过多级校验(这个多级认证的意思是,比如我的证书是由A来颁发的,那A是否合法那,A的证书是由B来颁发的,B的证书又是由C来颁发的,最终C是根证书,C证书内置在浏览器中,通过多级认证来完成对服务器认证),来实现对网站的认证。

对于我们自己做的自签名证书,浏览器在打开我们网站的时候,会进行安全提示,因为可能存在着中间攻击,如果用户准许访问还是可以访问的。

对于我们内部测试来说,或者我们局域网使用,是没有问题的,我们也可以通过把证书存入的方式,防止下次再出告警;生成私钥和证书,主要是通过openssl工具来生成的。

2.1 生成私钥和CSR文件

CSR文件证书签名请求文件,包含了服务器的密钥对,CA按照会校验这个文件,然后验证CSR请求文件。

执行命令:

#-nodes 表示私钥不加密,若不带参数将提示输入密码
#-newkey rsa:2048 -keyout test_key.pem 表示生成私钥(PKCS8格式)
openssl req -newkey rsa:2048 -nodes -keyout test_key.pem -out csr.pem

需要填些信息,自签名的除了密码,其他的无所谓。

Generating a 2048 bit RSA private key
.....................+++
.......+++
writing new private key to 'test_key.pem'
-----
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) [XX]:CN //国家名称(2个字母代码)[XX]:CN     
State or Province Name (full name) []:sichuan //州或省名
Locality Name (eg, city) [Default City]:chengdou //地点名称(如城市)
Organization Name (eg, company) [Default Company Ltd]:test //  组织名称(如公司)
Organizational Unit Name (eg, p) []:testunit  //  组织单位名称(例如,部分)
Common Name (eg, your name or your server's hostname) []:testssl.com  //  通用名称(例如,您的姓名或服务器的主机名)
Email Address []:testssl@163.com //  电子邮件地址

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

最终生成了密钥对文件和CSR文件。

[root@localhost testopenssl]# ll
total 8
-rw-r--r-- 1 root root 1090 Dec  9 10:11 csr.pem
-rw-r--r-- 1 root root 1704 Dec  9 10:11 test_key.pem

看下内容:

[root@localhost testopenssl]# cat test_key.pem 
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCuUjlxWRoP/Ukz
rCaaFJOcUGebIN7204v9VAjgZPVqCGGiiNPwpqQOjXJCTE+oYQnLKoYsFUW4Rhsw
gsJWiRsMmCHfKg07VPSvzU2sWwHV3OdEIMIIXxx0z3RhiwIVcztzwQzZXr3g6ciL
I8ZDtoveI2PocAggQcWRFVXlnllngGnTaHSAAjHR1Z/qkPUX30cLQmF6tMXRiTVN
......
.......
......
F5wdEOBTlbfTRd2jmp3eHnbVhT2RDuG8Xn5ZN+eK5zHpUspDFawTTzg5PFKdtr28
IWDXzRAaQt5O9XJr5p50Yp5lO/kpOET3gtSJxdcrAoGAf3MQ6l4bgEURZBH1ZNVL
7qStAy426zXIbY+8A+0fM0YIR4BZ0G++nGIMILayzoIp0s9O8gF0ZiaVthihgah6
joQyxFosVgsmYx/HSQKODinRWB5AfcPIr2cBXVoMmXZU+vi1a9wrdHAfOU6iCLHC
8j4XUhdmwI16TrgqM6cfWFI=
-----END PRIVATE KEY-----

2.2 生成自签名证书

openssl x509 -signkey test_key.pem -in csr.pem -req -days 3650 -out test_cert.pem

显示:

[root@localhost testopenssl]# openssl x509 -signkey test_key.pem -in csr.pem -req -days 3650 -out test_cert.pem
Signature ok
subject=/C=CN/ST=sichuan/L=chengdou/O=asiainfo/OU=testunit/CN=testssl.com/emailAddress=testssl@163.com
Getting Private key

openssl的命令实在是复杂,这是抄的两个,-signkey是指明使用的密钥对,-in 表示csr文件,-days表示有效期,out最终生成的x509格式的证书文件。

[root@localhost testopenssl]# more test_cert.pem
-----BEGIN CERTIFICATE-----
MIIDmjCCAoICCQDG1mD8Qx+3czANBgkqhkiG9w0BAQsFADCBjjELMAkGA1UEBhMC
Q04xEDAOBgNVBAgMB3NpY2h1YW4xETAPBgNVBAcMCGNoZW5nZG91MREwDwYDVQQK
DAhhc2lhaW5mbzERMA8GA1UECwwIdGVzdHVuaXQxFDASBgNVBAMMC3Rlc3Rzc2wu
Y29tMR4wHAYJKoZIhvcNAQkBFg90ZXN0c3NsQDE2My5jb20wHhcNMjAxMjA5MDIy
NTMzWhcNMzAxMjA3MDIyNTMzWjCBjjELMAkGA1UEBhMCQ04xEDAOBgNVBAgMB3Np
Y2h1YW4xETAPBgNVBAcMCGNoZW5nZG91MREwDwYDVQQKDAhhc2lhaW5mbzERMA8G
A1UECwwIdGVzdHVuaXQxFDASBgNVBAMMC3Rlc3Rzc2wuY29tMR4wHAYJKoZIhvcN
.....
s0ErNEkYND4Vk2IdPGKpf0f/XhozsoMeGM3/Zt+vrMU4zITRQ8EhnygxmN3xBrcQ
o9Vq7x15j3wtaTpnJQbeSLf3ygffegxA8kyzguCe8lWw/nUC3h6rZ77ca/VEFQb6
tVlLmAu5Ld1iC8x77Io=
-----END CERTIFICATE-----

有时候需要PKCS#12 格式即.p12结尾的证书,命令如下:

 openssl pkcs12 -export -in test_cert.pem  -out test_cert.p12 -inkey test_key.pem 

生成test_cert.p12 文件,需要输出密码12345m

2.3 提取公钥

单独提取公钥的命令:

openssl rsa -in test_key.pem  -pubout -out test_public_key.pem

2.4 提取私钥

 openssl  rsa -in  test_key.pem 

加密的可以通过:

openssl rsa -in test_key.pem -passin pass:12345m

命令查看,得到私钥:

-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEArlI5cVkaD/1JM6wmmhSTnFBnmyDe9tOL/VQI4GT1aghhoojT
8KakDo1yQkxPqGEJyyqGLBVFuEYbMILCVokbDJgh3yoNO1T0r81NrFsB1dznRCDC
CF8cdM90YYsCFXM7c8EM2V694OnIiyPGQ7aL3iNj6HAIIEHFkRVV5Z5ZZ4Bp02h0
gAIx0dWf6pD1F99HC0JherTF0Yk1TY3oVn1uheJj22TAKUG2rUIHQ81ZpwbRwHRd
ViInEyZ1D1tQRgHBvM8nyvIcz1m5p69Jiq6BJ72lGG7NYcZOYbe5lItOownwaUMS
qaFL75Lqin8c8902pxxjwJuNmDfFOQNjDYGj+wIDAQABAoIBADkJ5onUIdcBhaZG
ugrImNQY6w2zX8Fbzv6BNLZX0oVzYJ8SLmcb36pzVeOjnJz3w4Ca1XQvMbTuG49v
+a7fBd7FGLAwzkuPrNCpWLUAwkT8FyAPp+2dUW5XQzl3hqMGJXnmvRGTEoY5eMku
V31oibOR2OsBXWdQnhiu5oBPo+ldbOmEgdu3iaPNTtIeap6xDjxlHyd61JcTP+yz
....
/zjr/OQHwKP/1Rmb39wj6wg5AHG9LGkjN1kGyGPZ9tsBm1aZIA+UomUCgYEAyzCA
GAAd10y7vHc2w8MRQAOjDWwbPrTRnTkdSFnN/ZiUmE4fOg2RJqadnnjR4zNMh3Wi
wNidhOjr1H8VnydsaTfqFsLS0Ypw6M/THnT8wmKfTe/880XMguUZlwMhzOrHlMRt
r8Z7kOzkRDGDfzFeLNlxs1g3EIGvfKrCQuXNlt8CgYEAn4jeEIX+9iOfdRSv/k5C
k0FgHIa81JVEu1ugq6TFl+/QQZxlxgSDz/iNN+n7WJ8v/ifbMqj9e03BT6MbCtyX
syHz9dIoxAL5MvN0wvM3N4DqS1RT8rC16u55FSC6tOcr7aqFfG3XNWGqrjTwWjMg
3pJvh95oNJVPLHwSDKTkrbUCgYBrVPxlMTKSN4N4I9U3BcUH9qPcBD5EGoobrj7s
qBurGT1tUt8l8GK7cwoR2yqsBL4pVBecHRDgU5W300Xdo5qd3h521YU9kQ7hvF5+
WTfniucx6VLKQxWsE084OTxSnba9vCFg180QGkLeTvVya+aedGKeZTv5KThE94LU
icXXKwKBgH9zEOpeG4BFEWQR9WTVS+6krQMuNus1yG2PvAPtHzNGCEeAWdBvvpxi
DCC2ss6CKdLPTvIBdGYmlbYYoYGoeo6EMsRaLFYLJmMfx0kCjg4p0VgeQH3DyK9n
AV1aDJl2VPr4tWvcK3RwHzlOogixwvI+F1IXZsCNek64KjOnH1hS
-----END RSA PRIVATE KEY-----

保存为test_private.pem

三 Tomcat下部署

3.1 更改配置

找到conf下面的server.xml 编辑:

        <Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="7443" maxThreads="200" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA256,
        TLS_RSA_WITH_AES_128_CBC_SHA,
        TLS_RSA_WITH_AES_128_GCM_SHA256"
           scheme="https" secure="true" SSLEnabled="true"
            keystoreFile="conf/testopenssl/test_cert.p12" keystorePass="12345m" keystoreType="PKCS12"
           clientAuth="false" sslProtocol="TLS"/>

port:指明 https的端口为7443 ciphers: 为密钥套件,故意配置几个容易解密的,便于测试,生产环境不能这样用。keystoreFile:证书文件位置 keystorePass:证书密码 keystoreType:证书类型。

3.2 重启tomcat

shutdown.sh
startup.sh

3.3 配置wireshark

在编辑地方,找到“首选项” 配置解析的ip,端口,协议和对应的私钥文件,非加密的私钥文件。

还遇到一个坑,我连vpn测试的,结果抓不到,其实设置下就可以抓到包了,如下图:

找到vpn的虚拟网卡,勾上一个选项。

3.4 wireshark解密

我们因为已经配置了私钥,所以可以通过wireshark抓包并且直接解密,解密的https的报文颜色为淡绿色,如下:

https解密

注意:如果你解密不了,可能的原因是,开始抓包的时候,https的交互已经完成,可以重启浏览器连接下试试,如果再不行,重启后台的服务,开始抓包的时候一定要确保https的前面的协商过程也在抓的包里面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值