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