rabbitmq服务器及c客户端TLS支持

tls基本流程

单向认证

c--Client Hello-->s
s--Server Hello-->c
s--Server Certificate-->c //服务器证书发送给客户端后,客户端根据CA证书进行判断是否受信任
s--Server Hello Done-->c
c--Client Key Exchange-->s //生成客户端秘钥给服务端
c--Change Cipher Spec-->s 
c--Finished-->s
s--Change Cipher Spec-->c
s--Finished-->c

双向认证

c--Client Hello-->s
s--Server Hello-->c
s--Server Certificate-->c
*s--Certificate request-->c //要求客户端发送证书
s--Server Hello Done-->c
*c--Client Certificate-->s //客户端发送证书,由服务端根据CA证书进行验证
c--Client Key Exchange-->s
*c--Certificate Verify-->s //将握手消息的hmac值用私钥进行签名,发送签名值给服务端。前面仅仅发送了客户端证书给服务器,这里需要证明自己有证书关联的私钥
c--Change Cipher Spec-->s
c--Finished-->s
s--Change Cipher Spec-->c
s--Finished-->c

openssl证书生成

参考链接:openssl证书生成
1.生成CA证书及私钥,关键输出:ca.cer ca.key

openssl genrsa -aes256 -out ca.key 2048
openssl req -new -sha256 -key ca.key -out ca.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=CA/emailAddress=admin@test.com"
openssl x509 -req -days 36500 -sha256 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.cer

3.生成服务器证书及私钥,关键输出:server.cer server.key

openssl genrsa -aes256 -out server.key 2048
openssl req -new -sha256 -key server.key -out server.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=SERVER/emailAddress=admin@test.com"
openssl x509 -req -days 36500 -sha256 -extensions v3_req  -CA  ca.cer -CAkey ca.key  -CAserial ca.srl  -CAcreateserial -in server.csr -out server.cer

2.生成客户端证书及私钥,关键输出:client.cer client.key

openssl genrsa -aes256 -out client.key 2048
openssl req -new -sha256 -key client.key  -out client.csr -subj "/C=CN/ST=SD/L=JN/O=QDZY/OU=www.test.com/CN=CLIENT/emailAddress=admin@test.com"
openssl x509 -req -days 36500 -sha256 -extensions v3_req  -CA  ca.cer -CAkey ca.key  -CAserial ca.srl  -CAcreateserial -in client.csr -out client.cer

使用openssl命令行工具进行测试

单向认证

openssl s_server -accept 443 -key server.key -cert server.cer
openssl s_client -connect localhost:443 -CAfile ca.cer

双向认证

openssl s_server -accept 443 -key server.key -cert server.cer -CAfile ca.cer -Verify 1
openssl s_client -connect localhost:443 -cert client.cer -key client.key -CAfile ca.cer

rabbitmq服务器开启tls

参考链接:https://www.rabbitmq.com/ssl.html
注意,如果使用密码生成私钥一定要填密码项
经典配置格式:

[
    {
        rabbit, [{tcp_listeners,[{"::", 6672}]},
                {ssl_listeners, [58771]},
                {ssl_options, [{cacertfile, "ca.cer"},
                              {certfile,   "server.cer"},
                              {keyfile,    "server.key"},
                              {verify,     verify_peer},
                              {password,  "t0p$3kRe7"},
                              {fail_if_no_peer_cert, false}]}
                ]
    }
].

使用rabbitmqctl status可以查看,最后有以下输出证明成功开启tls:

Interface: [::], port: 58771, protocol: amqp/ssl, purpose: AMQP 0-9-1 and AMQP 1.0 over TLS

rabbitmq c客户端使用tls

使用下面链接的c库编译测试工具
https://github.com/alanxz/rabbitmq-c/tree/v0.11.0

mkdir build && cd build
cmake ..
cmake --build . [--config Release]

测试:

./examples/amqp_ssl_connect "localhost" 58771 100 "./openssl/ca.cer" "./openssl/client.key" "./openssl/client.cer"

正确输出:

Enter PEM pass phrase:
Done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值