Amazon AWS RDSのCA証明書が更新されることを受けて、MySQLのSSL証明書の有効期限の確認方法を検証した。
動作確認は以下のインスタンスで実施した。
- Amazon RDS (MariaDB, 10.1.31)
- Amazon Aurora (Aurora MySQL, 5.7.mysql_aurora.2.04.3)
opensslコマンドでは確認不可
MySQLはHTTPSなどと異なり、 openssl
コマンドによる証明書の確認ができない。
$ openssl s_client -connect $DATABASE_URL:3306 -showcerts CONNECTED(00000003) 140449419544216:error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol:s23_clnt.c:794: --- no peer certificate available --- No client certificate CA names sent --- SSL handshake has read 7 bytes and written 305 bytes --- New, (NONE), Cipher is (NONE) Secure Renegotiation IS NOT supported Compression: NONE Expansion: NONE No ALPN negotiated SSL-Session: Protocol : TLSv1.2 Cipher : 0000 Session-ID: Session-ID-ctx: Master-Key: Key-Arg : None PSK identity: None PSK identity hint: None SRP username: None Start Time: 1571886451 Timeout : 300 (sec) Verify return code: 0 (ok) ---
SSL証明書の有効期限確認方法
証明書の有効期限確認方法はオフィシャルで案内されている通り。
SHOW STATUS LIKE 'Ssl_server_not%'
コマンドにより証明書の有効期限を確認できる。
https://dev.mysql.com/doc/refman/5.7/en/creating-ssl-rsa-files-using-mysql.html
(2019/10/24時点で5.7は英語版のみ)
It is also possible to check SSL certificate expiration information using this SQL statement:
mysql> SHOW STATUS LIKE 'Ssl_server_not%'; +-----------------------+--------------------------+ | Variable_name | Value | +-----------------------+--------------------------+ | Ssl_server_not_after | Mar 5 22:03:06 2020 GMT | | Ssl_server_not_before | Feb 20 03:02:45 2019 GMT | +-----------------------+--------------------------+
SSL関連設定の確認方法
以下のコマンドでSSL証明書のパス等も確認できる。
mysql> SHOW VARIABLES LIKE 'ssl%'; +---------------+-----------------------------------------+ | Variable_name | Value | +---------------+-----------------------------------------+ | ssl_ca | /rdsdbdata/rds-metadata/ca-cert.pem | |... | | ssl_cert | /rdsdbdata/rds-metadata/server-cert.pem | |... | | ssl_key | /rdsdbdata/rds-metadata/server-key.pem | |... | +---------------+-----------------------------------------+
まとめ - MySQLのSSL証明書有効期限を確認する
SHOW STATUS LIKE 'Ssl_server_not%'
コマンドにより、MySQLのSSL証明書の有効期限を確認できる。
将来的には、Prometheus mysqld_exporter などで監視できるようにしたい...