Apache + mod_ssl で使うSSL証明書の発行手順
CSR作成時にはSSLを使いたいドメインとそれを管理している組織の情報(名称、所在地)が必要なのであらかじめ用意しておくこと。具体的には
- Country Name 国コード
- 日本ならJP。
- State or Province Name
- 日本なら都道府県。Tokyoなど。
- Locality Name
- 日本なら市区町村。Chiyoda-ku, Osaka cityなど。
- Organization Name
- 会社名など。
- Organizational Unit Name
- 部署名。空欄でかまわない。
- Common Name
- 最重要項目!ドメインを指定する。最近はexample.comを申し込むとSubject Alternative Namesとしてwww.example.comでも有効なSSL証明書にしてくれることもある(逆もあり)。ワイルドカードSSLなら*.example.comとする。
これ以外の項目(メールアドレス、パスワードなど)は空でよい。Locality NameやOrganization Nameなどは認証局で削除したり上書きしたりすることもある。
秘密鍵とCSRを同時に生成してしまう
以下のコマンドで一発で秘密鍵と認証局(SSL証明書発行業者)に渡すCSRを作ることができる。
$ openssl req -nodes -newkey rsa:2048 -sha256 -keyout mydomain.key -out mydomain.csr
- req
- CSR作成コマンド。詳しくはマニュアルを参照。
- -nodes
- 秘密鍵を暗号化しない。暗号化するなら-des3などを指定する。暗号化した場合、Apacheの再起動など秘密鍵を読み込む際に常にパスワードが要求される。
- -newkey rsa:2048
- CSRで使う秘密鍵の作成を同時に行なう。暗号方式はRSA、鍵長は2048bitを指定。鍵長は4096bitだとより安全だが証明書の有効期間が数年程度なら2048bitで心配ないだろう。。鍵長1024bitだともはや認証局が受け付けてくれないはず。
- -sha256
- 署名アルゴリズムにSHA-2を指定する*1。SHA-1 (-sha1)とMD5 (-md5) も指定できるだろうがこれもおそらく認証局が受け付けないだろう。
- -keyout mydomain.key
- 秘密鍵のファイル名を指定する。ここでは「mydomain.key」。
- -out mydomain.csr
- CSRのファイル名を指定する。ここでは「mydomain.csr」。
秘密鍵とCSRの生成を別々に行なう場合
$ openssl genrsa -out mydomain.key 2048 $ openssl req -key mydomain.key -out mydomain.csr
2048bitのRSA秘密鍵をmydomain.keyとして保存し、次にその秘密鍵を指定してmydomain.csrというCSRファイルを作成している。
genrsaコマンドでは-desや-des3を指定しない限り秘密鍵そのものをパスワードで保護することはしない。乱数ファイルを指定したい場合は-randで指定する。
秘密鍵の暗号化解除
暗号化オプション付きで秘密鍵を生成した場合は次のコマンドで暗号化を解除できる
$ openssl rsa -in mydomain.key.org -out mydomain.key
パスワードを聞かれるので入力すればOK。
入力値は表示されず反応がないように見えるけど最後にEnterを押せばちゃんと処理されます。