ここでPHP(およびmysqli_real_connect
)はサーバーではなくクライアントです。 mysqli_ssl_set
を使用して構成しています クライアント証明書認証用(およびサーバーキーと証明書の使用)。
MySQLサーバーをどのように構成したかはわかりませんが、構成の(MySQL)サーバーセクションに次のようなものがあるはずです:
ssl-key=/mysql-ssl-certs/server-key.pem
ssl-cert=/mysql-ssl-certs/server-cert.pem
ssl-ca=/mysql-ssl-certs/ca-cert.pem
これらはとにかくクライアント側に属していません(CA証明書のみが属しますが、サーバーの秘密鍵は属しません)。
これを実行したら、コマンドラインクライアントを使用してサーバーが適切に構成されているかどうかを確認できます。
mysql --ssl-verify-server-cert --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
または、おそらくこれ(ただし、SSL / TLSを使用するには、サーバー証明書を実際に有効にする必要があります)
mysql --ssl-ca=/mysql-ssl-certs/ca-cert.pem --ssl -h hostname ...
これは、少なくともコマンドラインで機能するはずです。
次に、PHPから2つのオプションがあります。
-
mysqli_ssl_set
を使用します あなたがやったように、しかし$key
を残します および$cert
サーバー証明書とは実際には異なるはずのクライアント証明書を使用する場合を除き、null。 (それが機能するかどうかは思い出せません。) -
おそらく簡単です。
mysqli_ssl_set
を省略してください 全体として、これをグローバルMySQLクライアント構成ファイルで構成します(PHPがそれを取得できるはずです。おそらく/etc/mysql/my.cnf
、ただし、これはディストリビューションによって異なる場合があります):[client] ssl-ca=/mysql-ssl-certs/ca-cert.pem
(これはサーバー構成に似ていますが、クライアント側/クライアントセクションにあります。)
承認部分(GRANT
):
REQUIRE SSL
SSL/TLSの使用のみが必要です-
REQUIRE ISSUER
、REQUIRE SUBJECT
およびREQUIRE X509
必要な値と比較するためにクライアントにクライアント証明書を提示するように要求します(これは、ssl-key
を使用する必要がある場合です。 およびssl-cert
クライアント側(configまたはmysqli_ssl_set
内 。