Azure Database for MySQL を使いたかったので証明書の検証エラーを回避した話

昨日しばやん先生の記事を見かけてました。 まさに使おうとしていたところで、他人ごとではありませんでした。

blog.shibayan.jp


公式情報

まずは公式情報。

現在、サービスへの mysql.exe 接続で “–ssl-mode=VERIFY_IDENTITY” オプションを使用した場合に、接続が次のエラーで失敗するという既知の問題が確認されています: ERROR 2026 (HY000): SSL connection error: SSL certificate validation failure Please downgrade to “–ssl-mode=VERIFY_CA” or lesser SSL modes (エラー 2026 (HY000): SSL 接続エラー: SSL 証明書の検証エラー “–ssl-mode=VERIFY_CA” または以前の SSL モードにダウングレードしてください)。 “–ssl-mode=VERIFY_IDENTITY” の使用が必要な場合は、サーバー名に ping を実行して、リージョン サーバー名を解決し (westeurope1-a.control.database.windows.net など)、この問題が解決するまで、接続内でそのリージョン サーバー名を使用します。 この制限は、今後削除する予定です。 Azure Database for MySQL に安全に接続するためにアプリケーションで SSL 接続を構成する | Microsoft Docs

ということなのでそのうち修正されるとは思いますが、現時点で使いたかったため、検証エラーを回避することにしました。


PHP はそれほど詳しくないため、以下の接続ドライバしか確認していません。

回避策

mysqli

mysqli_real_connect(
    $connection,
    $host,
    $user,
    $pass,
    $name,
    3306,
    '',
    MYSQLI_CLIENT_SSL_DONT_VERIFY_SERVER_CERT
);

参考: http://blog.machek.co.uk/2016/06/php-with-mysql-and-ssl.html

PDO

まだ対応できません。 PullReq 中のようです。

add a attribute to specify CN in PDO(version 7) by ghfjdksl · Pull Request #1913 · php/php-src · GitHub

おわりに

アップデートされたらこの記事の価値はなくなるので、そのころに見かけた人はスルーしてください。