メンテナンスのオーバーヘッドを減らし、セキュリティを向上させるために、自己署名証明書の使用からよく知られているCAのワイルドカード証明書の使用に切り替えようとしました。この証明書は数ヶ月間テストサーバーで使用されました。設定はうまく機能し、次のことができます(ドメイン名の匿名化)。
mysql --host=host.example-dot-com-equivalent-for.co.uk --user=query_user --password --ssl
パスワードを入力すると接続が成功します。でも実際にやろう確認する証明書の一般名次のように失敗します。
$ mysql --host=host.example-dot-com-equivalent-for.co.uk --user=query_user --password --ssl --ssl-verify-server-cert
ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure
cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_SSL=yes
クライアントを使用してMariaDB 5.5をコンパイルして実行すると、次のトレース--debug
ログが表示されます(削除済み)。
mysql_real_connect: info: Connecting
mysql_real_connect: info: net->vio: 0x0 protocol: 0
mysql_real_connect: info: Server name: 'host.example-dot-com-equivalent-for.co.uk'. TCP sock: 3306
mysql_real_connect: info: IP 'client'
mysql_real_connect: info: IPV6 getaddrinfo host.example-dot-com-equivalent-for.co.uk
mysql_real_connect: info: Try connect on all addresses for host.
mysql_real_connect: info: Create socket, family: 2 type: 1 proto: 6
mysql_real_connect: info: Connect socket
mysql_real_connect: info: End of connect attempts, sock: 4 status: 0 error: 0
mysql_real_connect: info: net->vio: 0x263c540
mysql_real_connect: info: Read first packet.
mysql_real_connect: info: mysql protocol version 10, server=10
get_charsets_dir: info: charsets dir: '/usr/local/mysql/share/charsets/'
my_stat: error: Got errno: 2 from stat
run_plugin_auth: info: using plugin mysql_native_password
native_password_auth_client: info: no password
native_password_auth_client: info: IO layer change in progress...
ssl_do: info: ssl: 0x2823e50 timeout: 0
ssl_do: info: SSL connection succeeded
ssl_do: info: Using cipher: 'AES256-GCM-SHA384'
ssl_do: info: Peer certificate:
ssl_do: info: subject: '/OU=Domain Control Validated/OU=Gandi Standard Wildcard SSL/CN=*.example-dot-com-equivalent-for.co.uk'
ssl_do: info: issuer: '/C=FR/ST=Paris/L=Paris/O=Gandi/CN=Gandi Standard SSL CA 2'
ssl_do: info: no shared ciphers!
native_password_auth_client: info: IO layer change done!
ssl_verify_server_cert: info: Server hostname in cert: *.example-dot-com-equivalent-for.co.uk
run_plugin_auth: info: authenticate_user returned CR_ERROR
run_plugin_auth: info: res=0
mysql_real_connect: error: message: 2026/HY000 (SSL connection error: SSL certificate validation failure)
end_server: info: Net:
main: info: Shutting down: infoflag: 3 print_info: 1
Server name
値と一致する値に特に注意してくださいCN
。
証明書が指定されたホスト名に対して有効で有効期限が切れていないことを確認しましたopenssl s_client -connect host.example-dot-com-equivalent-for.co.uk:443 -verify_return_error < /dev/null
。 「X509v3サブジェクト代替名」フィールドには、「DNS:*.example-dot-com-equivalent-for.co.uk、DNS:example-dot-com-equivalent-for.co.uk」が含まれています。
完全な証明書チェーンは、次ssl-cert
のようにサーバー構成が指すファイルにあります。他の場所でもおすすめ。 「USERTrust RSA認証局」は、クライアントの/etc/pki/tls/certs/ca-bundle.crtおよび/etc/pki/tls/certs/ca-bundle.trust.crtにあります。--ssl-ca=/etc/pki/tls/certs/ca-bundle.crt
コマンドに追加しようとしましたが、何も変更されませんでした。
質問は次のように終わります。MySQL / MariaDBクライアントはワイルドカード証明書をサポートしていますか?それでは、接続に問題があるのでしょうか?
元の顧客:
$ mysql --version
mysql Ver 15.1 Distrib 10.1.21-MariaDB, for Linux (x86_64) using readline 5.1
デバッグクライアント:
$ ./client/mysql --version
./client/mysql Ver 15.1 Distrib 5.5.56-MariaDB, for Linux (x86_64) using readline 5.1
仕える人:
# rpm -q mariadb
mariadb-5.5.52-1.el7.x86_64
クライアントではなくSSLライブラリに問題がある可能性が高いので、dba.SEではなくunix.SEに公開してください。
答え1
MariaDBクライアントライブラリはワイルドカード証明書をサポートしていません。マリアDB 10.1.23。
Percona-Serverのクライアントライブラリはワイルドカードをサポートするようになりました。ペルコナサーバー5.7.18-16そしてペルコナサーバー 5.6.36-82.1
この機能をサポートするMariaDBおよびPercona-Serverクライアントライブラリの場合、基本x509_check_host
機能をサポートするにはOpenSSL 1.0.2+も必要です。
5.7.22および8.0.11以降、アップストリームMySQLクライアントはワイルドカード証明書をサポートしません。
これは、libmysqlclient.so(libperconaserverclient.so)ベースのクライアントにのみ適用されます。 mysql C API(JDBC、Goなど)をラップしない他のコネクタのSSLワイルドカードサポートは、実装によって異なります。