MySQLでSSLを有効にする


24

Ubuntu Server 12.04を実行していますが、MySQLへのSSL接続を有効にします。

OpenSSLで次のキー/証明書ファイルを生成しました。

  • ca-cert.pem
  • server-cert.pem
  • server-key.pem

これらをに保存して/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  |
+---------------+----------------------------+

私が欠けているアイデアはありますか?ありがとう


2
この素晴らしいスレッドをご覧ください。
サーチャーロ

リンクSirCharloに感謝しますが、そのスレッドで解決された問題は私の状況には当てはまらないようです。
visitor93746

1
@SirCharloが言及しているのは、どこを見たいかです。具体的には、Apparmorの部分と投稿#10です。Debian Squeezeまたは古いUbuntuで生成したキーは正常に動作します。12.04で再生成すると、再び失敗します。MySQLエラーログも参照してください。
gertvdijk

2
これと同じ質問があり、何時間も費やしましたが、@ user262116の答えで解決しました。あなたが助けたなら、その答えを受け入れることをお勧めします!
エリキシニド

回答:


33

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.04にはOpenSSL 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

1
この投稿は私のために一日を節約しました!素晴らしい説明と解決策。
意見14

「エラー2026(HY000):SSL接続エラー:ASN:将来の日付より前」を
取得しました

残念ながら、まだERROR 2026 (HY000): SSL connection error: protocol version mismatchエラーが発生しました(OpenSSL 1.0.1fを使用)。OpenSSL 1.0.1eに切り替えて、上記の手順で機能しました。
ジャレット

2
この答えは驚くべきものです-私ができれば、大きな賞金を授与します。問題の素晴らしい説明。
エリキシニド

大群に追加する別の声。MySQLの文書化されたセットアップがうまくいかない理由の解決策を見つけようとしてインターネットを探し回っていました-この投稿の下部は私の一日を完全に救いました。
スティーブチェンバース

4

これは私を助けました:

ファイル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

お役に立てれば。


Ubunbtu 12.04でmysql 5.5.34を使用して同様の問題が発生しました。この場合、pemファイルはすべて読み取り可能で、同じ問題が引き続き発生していました。しかし、この答えは、所有者を変えることと結びついていました。
トミーアンデルセン

「RSA」を手動で追加しないでください -これはエラーを抑制するだけですが、SSLは機能しません(別のエラー「SSL接続エラー:プロトコルバージョンの不一致」が表示されます)。代わりにopenssl rsa
rustyx

3

12.04でも同じトラブルが発生しましたが、実際には問題を引き起こしたのは防具でした。

Ubuntu Forums解決策を見つけ.pemファイルを移動して/etc/mysql解決しました。

でapparmorの設定を変更することもできます/etc/apparmor.d/usr.sbin.mysqld


これも私が抱えていた問題でした
ジョナサン

それはタイプミスですか?「pemファイルの移動」ではなく「pemファイルの移動」を意味しますか?
とてもつまらない

1

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

すばらしいです。しかし、これはどのように行うことができますか?時間をかけてさらに説明、より多くの情報を与える:)
ルシオ

これは、server-key.pemファイルにRSAを追加することと組み合わされて、うまくいきました。
トミーアンデルセン

1

Ubuntu 16.04ではmysql_ssl_rsa_setup、質問のようにshow変数のファイルを見ることができましたがhave_sslhave_openssl引き続き表示されましたDISABLED

ソリューションにしましたchown mysql.mysql /var/lib/mysql/*.pem。あるいは、mysqlユーザーとしてmysql_ssl_rsa_setupを実行すると、正しい許可を持つファイルが作成されると思います。


質問は4年2か月前です... OPがあなたの答えに答えることはまずありません。
WinEunuuchs2Unix

1
これは将来の読者向けのサービスとして単に投稿したものです。これは、この問題のGoogle検索結果の中でトップの1つであり、読んだものが問題解決に役立たなかったためです。Ubuntu 12.04および14.04の世界の状態に関するこの回答の価値は、妥当性を失っています。
クレイグライト

@ WinEunuuchs2UnixおそらくOPではないかもしれませんが、ほぼ2年後、まさにこの答えを探しています。クレイグありがとう!
オールドスクール

0

秘密鍵ファイルは次のようになります(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"タグを手動で手動で追加しないください。形式が異なるためです。


-1

SSL起動オプションは、my.cnfファイルの上部近くにある必要があります。そうでない場合、無視される可能性があります。SSL変数が無視されているRHEL 6.4でmysql 5.6を実行する際に問題が発生しました。my.cnfファイルの最後にありました。それらをファイルの先頭([mysqld]のすぐ下)に移動し、サーバーを再起動しましたが、すべて問題ありませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.