sql >> データベース >  >> RDS >> Mysql

PHPからMySQLへのSSL接続

    ここで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 ISSUERREQUIRE SUBJECT およびREQUIRE X509 必要な値と比較するためにクライアントにクライアント証明書を提示するように要求します(これは、ssl-keyを使用する必要がある場合です。 およびssl-cert クライアント側(configまたはmysqli_ssl_set内 。


    1. MySQLdは、5.6から5.7へのbrewアップグレード後に起動しません

    2. エラー:列が存在しません

    3. LIKE'string' vs ='string'を使用した場合のOracleのパフォーマンスへの影響はありますか?

    4. SQLAlchemyでUnicode省略記号をmySQLテーブルに正しく挿入するにはどうすればよいですか?