Comodo で kubernetes の SSL 証明書を更新する。

今回kubernetes上にあるアプリケーションの証明書が切れてしまったので更新しました。
Comodo特有のわかりにくいところがありましたので、ここに書いておきたいと思います。

Comodo で新しい証明書を作成する

今回はUC Certificate を更新したいので、こちらからアクセスして、 Get certificate をクリックします。

STEP 2 では Web server system を Other にして今回は進めます。

適宜進めていくと、Action requied が2つ出てきます。
一つ目の Submit CSR でかなりつまづきました。
CSRってなんだ?というところから始まったからです。

CSR を提出する。

こちらにやり方が書いてあるんですが、以下の通り手順を踏みます。

1, ターミナルで

$ openssl req -nodes -newkey rsa:2048 -keyout myserver.key -out server.csr

を走らせ、myserver.keyserver.csrを作ります。
server.csrのテキストすべてを今回は提出します。

2, ドメインの whoisに登録されているメールアドレス当てにメールを送信します。メールが届いたあと、verification code を記入します。

3, メールで zip ファイルが届きます。その中に含まれている 12345678.crt のような申し込み番号が書かれたファイルを使います。

4, 次に dhparams を作成します。
ターミナルで以下のコマンドを走らせます。

$ openssl dhparam -out dhparam.pem 2048

すると dhparam.pem が作成されます。

5, CSRを作成した時にできた、myserver.keyと Comodo から届いた 12345678.crt、最後に作成したdhparam.pem をそれぞれ base64 に encode します。

$ cat myserver.key | base64 > myserver.txt
$ cat 12345678.crt | base64 > 12345678.txt // 追記をご覧ください
$ cat dhparam.pem | base64 > dhparam.txt
追記(2017/09/13)

以上の方法であると、中間証明書が足りないエラーが発生するため、androidやhttps通信のみを許可しているアプリからアクセスできなくなります。

正しくは以下のように、メール添付されたルート証明書以外をbase64エンコードします。

$ cat 12345678.crt COMODORSADomainValidationSecureServerCA.crt  COMODORSAAddTrustCA.crt | base64 > 12345678.txt

6, それぞれの値を使って secret.yaml を作成します。

apiVersion: v1  
kind: Secret  
metadata:  
  name: new-secret
  namespace: default
data:  
  proxycert: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0t...
  proxykey: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVkt...
  dhparam: LS0tLS1CRUdJTiBESCBQQVJBTUVURVJTLS0...

これを kubernetes の secret に書き換えます。
今回は更新なので、new-secret がすでに kubernetes の中にあると仮定します。

$ kubectl replace -f /path/to/your/secret.yaml --namespace default

あとはアプリケーションを一度落として、再起動したら新しい secret を読むようになります。

追記(2017/09/13)
設定が終わったら必ずチェッカーを使って、チェックしましょう。

https://www.ssllabs.com/ssltest/
https://cryptoreport.websecurity.symantec.com/checker/