ワンライナーでSSL証明書のCSRを生成する


ワンライナー

秘密鍵とCSRファイルの一括生成

cd /etc/pki/tls/private ;
s=www.example.jp ;
head /dev/urandom > /dev/null ;
openssl req -subj "/C=JP/ST=Tokyo/L=Chuo-ku/O=Example K.K./OU=Example Section/CN=$s" -new -newkey rsa:2048 -rand /dev/urandom -nodes -keyout $s.key -out $s.csr ;
openssl req -subject < $s.csr
出力例
Generating a 2048 bit RSA private key
.........................................................................................+++
.....................................................+++
writing new private key to 'www.example.jp.key'
-----
subject=/C=JP/ST=Tokyo/L=Chuo-ku/O=Example K.K./OU=Example Section/CN=www.example.jp
-----BEGIN CERTIFICATE REQUEST-----
MIICvjCCAaYCAQAweTELMAkGA1UEBhMCSlAxDjAMBgNVBAgMBVRva3lvMRAwDgYD
VQQHDAdDaHVvLWt1MRUwEwYDVQQKDAxFeGFtcGxlIEsuSy4xGDAWBgNVBAsMD0V4
YW1wbGUgU2VjdGlvbjEXMBUGA1UEAwwOd3d3LmV4YW1wbGUuanAwggEiMA0GCSqG
SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCzic281xJRAZGBAhP85vGex7fN/UBA+icW
Y18DyGYBpAUAnL8+kgwRSMiyfz/BprsSuki2bw2ivmMKPslLM9LizPnxaEKujCel
UKbR4++GiFTWAuKupZJvFVFYBOGVAw9DhIF2qi/ihreLSGvHi0VFu+7dEsR4AMpW
axRRPZoF/wnkHzpNSCSUQ371WKFPfZIvFidXX9+nl9tBaG9kYkkF+6glCEWiT5z0
10RXGaoGOYu9CtVE1cClAHTL3Qgkb3XxTngQ1yrnpBpCRMkuHB/gRyuooDuERFWr
rUOhEXEGKOl/dgyDVHmPZj7Q+G94n3QJ0maSGObp1jPJc6In8Ff3AgMBAAGgADAN
BgkqhkiG9w0BAQsFAAOCAQEAJ8/AGbm9JNneOMK1S5/X1f0kqv3rNlL/ZjRBDhj4
DBDNaMXOYvPFDnHPC07DDBAG2PSrcm/Hh/GG4xLAzgpPeholeYx8kUlHa4x1ET1c
t/FHyN3U4tNV4PCP6hT9buv9RqOcVrYNLmmwAYq0A3ggBD8HHSNXdBLygMxPeO9c
PdxHzeUMnSnR6vNvnhTAx51nkcKgm8mUrs+VIhSB2oE7hmz+lpsOOxbdEeHyfmv+
5SmxYVprE3tIAt/MVt6nc9fhxI+v0o0v/h0H8z4APYNFPcSUmvF54v5ZhCYkKjiv
TLoHoLvRTUmI8WBZKGvZbyOQHMLIOLNTF8zxCv/2Z2x7DQ==
-----END CERTIFICATE REQUEST-----

ワンライナーと言いつつ見づらいので改行しておく。
s=www.example.jp/C=JP/ST=Tokyo/L=Chuo-ku/O=Example K.K./OU=Example Section を条件に合わせて変更する。
/etc/pki/tls/private/www.example.jp.key/etc/pki/tls/private/www.example.jp.crt が生成される。
subject= の行で内容を確認し、-----BEGIN CERTIFICATE REQUEST----- から -----END CERTIFICATE REQUEST----- までをコピーしてSSL証明書の申込画面に貼り付ける。

旧来のやり方

秘密鍵の生成

cd /etc/pki/tls/private
head /dev/urandom > /dev/null
openssl genrsa -passout pass:P@assw0rd -aes256 -rand /dev/urandom 2048 > www.example.jp.key
出力例
2048 semi-random bytes loaded
Generating RSA private key, 2048 bit long modulus
...+++
.....................+++
e is 65537 (0x10001)

openssl genrsa は RSA 秘密鍵を生成するコマンド。出力ファイルは -out ファイル名 でも指定できる。
-aes256 は暗号化アルゴリズム。-aes128 -aes192 -aes256 -camellia128 -camellia192 -camellia256 -des -des3 -idea などが指定できる。-des3 の記述が多いが、強度の観点からは -aes256-camellia256 が望ましい。
-rand オプションでは rand.dat をいちいち作成する例が多いが、わざわざゴミファイルを作る必要はない。
暗号化アルゴリズムおよび -rand は未指定でも生成されるが、その場合のデフォルト条件は不明。

パスワードの解除

openssl rsa -in www.example.jp.key -out www.example.jp.key -passin pass:P@assw0rd
出力例
writing RSA key

Apache が再起動した際にパスワードを求められて止まってしまうので、パスワードを解除しておく必要がある。パスワードありの場合、一応 SSLPassPhraseDialog ディレクティブで対応できる。

CSR の生成

openssl req -new -subj "/C=JP/ST=Tokyo/L=Chuo-ku/O=Example K.K./OU=Example Section/CN=www.example.jp" -key www.example.jp.key > www.example.jp.csr