keystore の中の certificate が有効か確認する
Kafka の helm chart の TLS を有効にしようとしたのだが、失敗した。
しょうもないミス(もしくはこのやり方が間違ってる)のだと思うのだが、自分で 前回 openssl と keytool を使った keystore 作成スクリプトを解析する でストアした KeyStore が正しいのか検証してみることにした。
方針
- Keysotre の中の (サーバー)証明書を取り出す
- Keystore の中の Private Key を取り出す
- 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>
Private Key の取り出し
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>
Private Key の取り出し
まず、Private Key のエイリアスを見つけよう。
$ 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 の keystore を作成する
$ keytool -importkeystore -srckeystore kafka-0.keystore.jks -destkeystore keystore.p12 -deststoretype PKCS12 -srcalias localhost -deststorepass PASSWORD -destkeypass PASSWORD
pkcs12 のキーストアから Private Key を出力。
openssl pkcs12 -in keystore.p12 --nodes -nocerts -out key.pem
サーバーの起動
openssl のツールでサーバーを起動できる。export した証明書と、Private Key を使ってサーバー起動する。
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
まとめ
oepnssl ツールは簡易なサーバーとクライアントを作れて動作確認できるのはかなりいい感じ。
Author And Source
この問題について(keystore の中の certificate が有効か確認する), 我々は、より多くの情報をここで見つけました https://qiita.com/TsuyoshiUshio@github/items/80c1da7739afda60fc03著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .