检查密钥库中的证书是否有效

我试图启用 Kafka 的 Helm chart 的 TLS,但失败了。

无法找到预期的Java密钥库文件(JKS)!在使用Kafka Bitnami Helm图表启用TLS加密时,它们是必需的。

我认为这个错误(或者这种方法是错的),但是我决定自己分析上一次使用openssl和keytool创建密钥库的脚本,并验证一下我所存储的KeyStore是否正确。

政策与行动计划

    1. 提取Keystore中的服务器证书

 

    1. 提取Keystore中的私钥

 

    通过openssl的server s_client子命令来验证是否可以进行实际通信。

提取服务器证书

$ keytool -keystore kafka-0.keystore.jks -export -alias localhost -rfc -file signed_exported.crt
Enter keystore password:  
Certificate stored in file <signed_exported.crt>

提取私钥

首先,找到私钥的别名。

$ keytool -list -v -keystore kafka-0.keystore.jks -storepass cooder01
 :
Alias name: localhost
Creation date: Jan 10, 2021
Entry type: PrivateKeyEntry
Certificate chain length: 2
  :

看起来localhost是密钥对的别名。虽然有点麻烦,但可以通过以下方法完成。

创建一个 pkcs12 格式的密钥库。

$ keytool -importkeystore -srckeystore kafka-0.keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12 -srcalias localhost -deststorepass PASSWORD -destkeypass PASSWORD

从 pkcs12 密钥库中导出私钥。

openssl pkcs12 -in keystore.p12  --nodes -nocerts -out key.pem

启动服务器

可以使用OpenSSL工具启动服务器。使用导出的证书和私钥来启动服务器。

openssl s_server -cert signed_exported.crt -key key.pem 

正在本地运行。

$ lsof -i:4433 -P
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
openssl 19336 ushio    3u  IPv6 460263      0t0  TCP *:4433 (LISTEN)

启动客户端

我本以为这会失败(因为是自证明书),果然失败了。如预料的那样。

$ openssl s_client -connect localhost:4433
  :
    Start Time: 1610343426
    Timeout   : 7200 (sec)
    Verify return code: 21 (unable to verify the first certificate)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK

那么,我只需找到添加CA证书的选项,然后按照以下步骤连接应该就可以了。

$ openssl s_client -connect localhost:4433 -CAfile ca.crt.exported 
    Start Time: 1610344811
    Timeout   : 7200 (sec)
    Verify return code: 0 (ok)
    Extended master secret: no
    Max Early Data: 0
---
read R BLOCK

hello

服务器也收到了。

Shared ciphers:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA384:DHE-RSA-AES256-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES256-SHA:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES128-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA
Signature Algorithms: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224:DSA+SHA224:DSA+SHA256:DSA+SHA384:DSA+SHA512
Shared Signature Algorithms: ECDSA+SHA256:ECDSA+SHA384:ECDSA+SHA512:Ed25519:Ed448:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA-PSS+SHA256:RSA-PSS+SHA384:RSA-PSS+SHA512:RSA+SHA256:RSA+SHA384:RSA+SHA512:ECDSA+SHA224:RSA+SHA224
Supported Elliptic Groups: X25519:P-256:X448:P-521:P-384
Shared Elliptic groups: X25519:P-256:X448:P-521:P-384
CIPHER is TLS_AES_256_GCM_SHA384
Secure Renegotiation IS supported

hello

总结

OpenSSL工具可以轻松创建和测试简易服务器和客户端,非常方便。

广告
将在 10 秒后关闭
bannerAds