オレオレ SSL 証明書(自己署名証明書)を作るワンライナーです。
$ openssl req -x509 -sha256 -nodes -days 3650 -newkey rsa:2048 -subj /CN=localhost -keyout server.key -out server.crt
上記のコマンドで server.key(秘密鍵) および server.crt(自己署名証明書) が作成されます。有効期限は 10 年(3650 日)。Common Name が決まっている場合は CN=localhost のところを FQDN に置き換えてもいいでしょう。
オレオレ証明書を作るだけならこれで終わりですが、せっかくなので秘密鍵(Private Key)と証明書署名要求(CSR)、証明書(CRT)を 1 つずつ順番に作る方法も紹介します。
目次
秘密鍵を作成
秘密鍵(Private Key)を作成
$ openssl genrsa 2048 > server.key
ファイルの中身を確認
$ openssl rsa -text < server.key
Private-Key: (2048 bit)
...
証明書署名要求を作成
証明書署名要求(CSR)を作成
$ openssl req -new -key server.key > server.csr
コマンドを実行するといろいろ入力を求められますが、全部デフォルト Enter 連打で OK。オレオレ証明書なので、ちゃんとした値を入れてもブラウザから警告が出ます。FQDN が決まっていたら Common Name で FQDN を入力してもいいです。
Country Name (2 letter code) [AU]:
State or Province Name (full name) [Some-State]:
Locality Name (eg, city) []:
Organization Name (eg, company) [Internet Widgits Pty Ltd]:
Organizational Unit Name (eg, section) []:
Common Name (e.g. server FQDN or YOUR name) []:
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
ファイルの中身を確認
Subject に入力した値が表示されます
$ openssl req -text < server.csr
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
自己署名証明書を作成
自己署名証明書(CRT)を作成。これまでに作成した秘密鍵と証明書署名要求に対して、自分で署名を行います。有効期限は 10 年 (3650 日)。
$ openssl x509 -days 3650 -req -sha256 -signkey server.key < server.csr > server.crt
ファイルの中身を確認
$ openssl x509 -text < server.crt
Certificate:
Data:
Version: 1 (0x0)
Serial Number:
ed:3d:bf:00:21:4c:ed:17
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
Validity
Not Before: Feb 11 14:22:25 2017 GMT
Not After : Feb 11 14:22:25 2027 GMT
Subject: C=AU, ST=Some-State, O=Internet Widgits Pty Ltd
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (2048 bit)
Issuer は認証局の値。Subject は 先ほどの CSR で入力した値。自己署名なので Issuer と Subject に同じ値が入っています。
Validity は有効期限です。