Ubuntu Server 12.04を実行していますが、MySQLへのSSL接続を有効にします。
OpenSSLで次のキー/証明書ファイルを生成しました。
これらを/etc/mysql
に保存し、次の行を/etc/mysql/my.cnf
に追加しました。
ssl-ca=/etc/mysql/ca-cert.pem
ssl-cert=/etc/mysql/server-cert.pem
ssl-key=/etc/mysql/server-key.pem
次に、Sudo service restart mysql
でサーバーを再起動しました。
ただし、これはSSLを有効にしないようです。 mysqlセッション内:
mysql> show variables like '%ssl%';
+---------------+----------------------------+
| Variable_name | Value |
+---------------+----------------------------+
| have_openssl | DISABLED |
| have_ssl | DISABLED |
| ssl_ca | /etc/mysql/ca-cert.pem |
| ssl_capath | |
| ssl_cert | /etc/mysql/server-cert.pem |
| ssl_cipher | |
| ssl_key | /etc/mysql/server-key.pem |
+---------------+----------------------------+
私が欠けているアイデアはありますか?ありがとう
Ubuntu 12.04にはOpenSSL 1.0.1が付属しており、古いOpenSSL 0.9.8バージョンとは多少異なるデフォルトがあります。
とりわけ、openssl req -newkey rsa:2048
を使用してRSAキーを生成すると、 PKCS#8 と呼ばれる形式のキーになります。 PEM形式で表されるこれらのキーには、より一般的な-----BEGIN PRIVATE KEY-----
ヘッダーがあり、どの種類(RSA、DSA、EC)キーであるかはわかりません。
以前、OpenSSL 0.9.8では、キーは常に PKCS#1 と呼ばれる形式であり、PEMとして表され、ヘッダーは-----BEGIN RSA PRIVATE KEY-----
でした。
このため、ヘッダーとフッターを以下から単純に変更することはできません。
-----BEGIN PRIVATE KEY-----
に
-----BEGIN RSA PRIVATE KEY-----`
同じものではなく、機能しません。代わりに、openssl rsa
を使用してキーを古い形式に変換する必要があります。このような:
openssl rsa -in key_in_pkcs1_or_pkcs8.pem -out key_in_pkcs1.pem
Ubuntu 12.04上のMySQL(v5.5.35)は、yaSSL(v2.2.2)と呼ばれるSSL実装を使用しています。キーはPKCS#1形式である必要があり、OpenSSL 1.0以降で使用されるPKCS#8形式をサポートしていません。このスレッドの他の投稿で示唆されているように、ヘッダーとフッターを単に変更する場合、MySQL/yaSSLは文句を言いませんが、接続できず、代わりに次のようなエラーが発生します。
ERROR 2026 (HY000): SSL connection error: protocol version mismatch
Ubuntu 14.04OpenSSL 1.0.1fと新しい設定が付属しています。特に、以前のバージョンで使用されていたSHA1ではなく、SHA256ダイジェストを使用して証明書を生成します。偶然にも、MySQLにバンドルされているyaSSLバージョンもこれをサポートしていません。
MySQLで使用する証明書を生成する場合、RSAキーが従来のPKCS#1 PEM形式に変換され、その証明書がSHA1ダイジェストを使用していることを忘れないでください。
独自のCA、サーバー証明書、およびクライアント証明書を生成する方法の例を次に示します。
# Generate a CA key and certificate with SHA1 digest
openssl genrsa 2048 > ca-key.pem
openssl req -sha1 -new -x509 -nodes -days 3650 -key ca-key.pem > ca-cert.pem
# Create server key and certficate with SHA1 digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout server-key.pem > server-req.pem
openssl x509 -sha1 -req -in server-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > server-cert.pem
openssl rsa -in server-key.pem -out server-key.pem
# Create client key and certificate with SHA digest, sign it and convert
# the RSA key from PKCS #8 (OpenSSL 1.0 and newer) to the old PKCS #1 format
openssl req -sha1 -newkey rsa:2048 -days 730 -nodes -keyout client-key.pem > client-req.pem
openssl x509 -sha1 -req -in client-req.pem -days 730 -CA ca-cert.pem -CAkey ca-key.pem -set_serial 01 > client-cert.pem
openssl rsa -in client-key.pem -out client-key.pem
これは私を助けました:
ファイルserver-key.pemのヘッダーとフッターは次のようになりました。
-----BEGIN PRIVATE KEY-----
...
...
-----END PRIVATE KEY-----
ただし、次のようなものが必要です。
-----BEGIN RSA PRIVATE KEY-----
...
...
-----END RSA PRIVATE KEY-----
BEGIN RSA PRIVATE KEYに注意してください
ログを表示するには:
Sudo vim /var/log/mysql/error.log
お役に立てれば。
12.04でも同じトラブルが発生しましたが、実際には問題の原因は防具でした。
buntuフォーラムでの解決策 を見つけ、.pem
ファイルを/etc/mysql
に移動すると解決しました。
/etc/apparmor.d/usr.sbin.mysqld
でapparmorの設定を変更することもできます。
Ubuntu 16.04では、mysql_ssl_rsa_setup
を実行しましたが、質問のようにショー変数のファイルを見ることができましたが、have_ssl
とhave_openssl
は引き続きDISABLED
でした。
解決策はchown mysql.mysql /var/lib/mysql/*.pem
でした。あるいは、mysqlユーザーとしてmysql_ssl_rsa_setupを実行すると、正しいパーミッションでファイルが作成されると思います。
Mysqldプロセスを実行しているユーザーに、キーと証明書ファイルへの読み取りアクセス権があることを確認してください。アカウント「mysql」を使用してMySQLを起動すると、次のようになります。
/etc/mysql$ chown mysql:mysql *.pem
/etc/mysql$ ls -l *.pem
-rwxrwx--- 1 mysql mysql 1631 2013-09-16 14:27 ca-cert.pem
-rwxrwx--- 1 mysql mysql 1281 2013-09-16 14:27 server-cert.pem
-rwxrwx--- 1 mysql mysql 1679 2013-09-16 14:27 server-key.pem
そうしないと、エラーログに次の内容が記録される場合があります。
SSL error: Unable to get certificate from '/etc/mysql/server-cert.pem'
130916 13:32:25 [Warning] Failed to setup SSL
130916 13:32:25 [Warning] SSL error: Unable to get certificate
秘密鍵ファイルは次のようになります(PKCS#1形式):
-----BEGIN RSA PRIVATE KEY-----
. . .
-----END RSA PRIVATE KEY-----
秘密鍵が代わりに始まる場合:
-----BEGIN PRIVATE KEY-----
(PKCS#8形式)、変換このようにする必要があります:
openssl rsa -in server-key.pem -out server-key.pem
しない形式が異なるため、「missing」「RSA
」タグを手動で手動で追加します。