【问题标题】:How do you monitor MariaDB SSL expiration for both replication and client certificates?您如何监控复制和客户端证书的 MariaDB SSL 到期?
【发布时间】:2020-03-12 18:13:15
【问题描述】:

有许多工具可用于监控通过 HTTPS 提供的服务的 SSL 过期时间,例如我们使用https://github.com/prometheus/blackbox_exporter 在内部和外部服务的 SSL 证书在

我们将 Percona 的 XtraDB 集群(即 MariaDB)与 SSL 一起用于前端和复制流量。 相关配置如下图:

$ less /etc/mysql/percona-xtradb-cluster.conf.d/mysqld.cnf
[mysqld]
pxc_encrypt_cluster_traffic=ON
ssl-ca=/etc/ssl/xtradb_server_ca.pem
ssl-cert=/etc/ssl/xtradb_server_cert.pem
ssl-key=/etc/ssl/xtradb_server_key.pem

[client]
ssl-ca=/etc/ssl/xtradb_server_ca.pem
ssl-cert=/etc/ssl/xtradb_server_cert.pem
ssl-key=/etc/ssl/xtradb_server_key.pem

我们还没有弄清楚:您如何监控mysqld.service 加载的证书的 SSL 过期?

我们使用 Ansible 部署新证书并在每台主机上执行 mysqld.service 的滚动重启,但是最好监控并确认这些证书正在正确更新。

有没有通用的解决方案?

【问题讨论】:

    标签: mysql ssl mariadb prometheus percona


    【解决方案1】:

    目前没有可用于确定服务器证书有效期的服务器变量或 API 函数。

    一个简单的解决方法是(假设未设置secure_file_priv):

    $ mysql -e "SHOW VARIABLES LIKE 'ssl_cert'"
    +---------------+----------------------------+
    | Variable_name | Value                      |
    +---------------+----------------------------+
    | ssl_cert      | /etc/mysql/server-cert.pem |
    +---------------+----------------------------+
    $ mysql  -e "SELECT LOAD_FILE('/etc/mysql/server-cert.pem')\G" > server-cert.pem
    $ openssl x509 -enddate -noout -in ./server-cert.pem
    notAfter=Jan 22 10:11:10 2021 GMT
    

    【讨论】:

    • 感谢您的回复,教会了我一些东西。它并没有完全解决问题,例如这仅确认/etc/mysql/server-cert.pem 文件已更新(运行 Ansible 应保证),但不能确认 MySQL 已实际加载了最新文件中的内容。有趣的是,不存在服务器变量或 API 函数。进一步思考:也许比较mysql.service uptime 和文件的时间戳是一个体面的解决方案?
    • 由于问题被标记为mariadb:如果安装了新证书,则无需重新启动。而是使用FLUSH SSL
    • 谢谢 Georg,这很有帮助,我以前不知道。
    【解决方案2】:

    离线与我分享了一个解决方案,请参阅https://mariadb.com/kb/en/ssltls-status-variables/

    MariaDB 有显示 SSL 过期信息的变量:

    mysql> show status like 'ssl_server_not%';
    +-----------------------+--------------------------+
    | Variable_name         | Value                    |
    +-----------------------+--------------------------+
    | Ssl_server_not_after  | May 24 11:46:23 2020 GMT |
    | Ssl_server_not_before | Feb 24 11:46:23 2020 GMT |
    +-----------------------+--------------------------+
    2 rows in set (0.00 sec)
    

    一旦我弄清楚如何更新此解决方案

    1. 通过https://github.com/prometheus/mysqld_exporter(打开mysqld_exporter/issues/457)将这些作为指标公开
    2. 通过https://github.com/free/sql_exporter查询变量

    【讨论】:

    • 这正是我想要的。
    猜你喜欢
    • 2010-10-16
    • 2016-08-19
    • 2017-06-01
    • 2012-07-19
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    • 2013-06-20
    • 2013-08-04
    相关资源
    最近更新 更多