正式なSSLサーバ証明書を発行する

ローカル環境や一般公開しない特定の範囲内で使用する分には、自己証明書(オレオレ証明書)でも問題ありませんが、
一般公開するような用途では警告(信頼された証明機関から発行されたものではありません)が出てしまうのでお勧めできません。

そこで、さすがに有料になってしまいますが、正式なSSLサーバ証明書を発行してみます。
最近は安いもので年額1,500円程度で発行できます。

SSLサーバ証明書には下記の3種類があるのですが、

  • ドメイン認証SSL
  • 企業認証SSL
  • EV SSL

ドメイン認証SSL以外は個人で取得できないので、ドメイン認証SSLを取得する前提ですすめます。

CSR(Certificate Signing Request)の作成

まずは、申し込みに必要となるCSR(Certificate Signing Request)ファイルを用意します。
途中まではオレオレ証明書を作成する流れと一緒です。

まずは、ディレクトリを移動。(ここである必要はありません。)

# cd /etc/pki/tls/private

秘密鍵の作成。

# openssl genrsa -des3 2048 -rand /var/log/ > www.hoge.jp.key
Generating RSA private key, 2048 bit long modulus
................................................................................+++
..........................................+++
e is 65537 (0x10001)
Enter pass phrase:                ←秘密鍵のパスフレーズを入力
Verifying - Enter pass phrase:    ←もう一度入力

暗号化を解除しておきます。(オリジナルはコピーしておく)

# cp -p www.hoge.jp.key www.hoge.jp.key.org
# openssl rsa -in www.hoge.jp.key -out www.hoge.jp.key
Enter pass phrase for private/localhost.key:    ←秘密鍵のパスフレーズを入力
writing RSA key

そしてCSRの作成。正式な証明書なので、入力項目は正式な情報を入力します。

# openssl req -new -key ./www.hoge.jp.key -out ./www.hoge.jp.csr
Country Name (2 letter code) [XX]:JP                                  ←国コード
State or Province Name (full name) []:Tokyo                           ←都道府県
Locality Name (eg, city) [Default City]:Edogawa-ku                    ←市区町村
Organization Name (eg, company) [Default Company Ltd]:SOFTPLUS        ←組織名(これは自分が名乗っているもので大丈夫です。サイト名など)
Organizational Unit Name (eg, section) []:                            ←部署名(未入力でもOKです)
Common Name (eg, your name or your server's hostname) []:www.hoge.jp  ←発行するドメイン(間違わないように!)
Email Address []:                                                     ←未入力でOK

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:                                              ←未入力でOK
An optional company name []:                                          ←未入力でOK

これでCSRの完成です。

発行を申請(委託)する

あとは発行を委託するサービスを選びます。
これはお好きなサービスを選べば良いと思いますが、自分はさくらのラピッドSSL(年額税込み1,620円)を選びました。(サーバもさくらなので)

申し込みの際に先ほど作成したCSRを求められると思うので、入力して申請します。
さくらの場合はこの後、ドメインの正当性確認のために確認用のHTMLファイルが発行されるので、それをドメイン直下に配置(インターネットから参照できるように)して待ちます。
さくらのラピッドSSLだと、営業日の申請であれば早ければその日にサーバ証明書が発行されます。

中間証明書という名の落とし穴

発行されたら、あとはサーバに設定するだけなのですが、ここで注意すべき点があります。
発行機関によっては発行された証明書の他に、中間証明書もサーバ側に設定してあげないといけません。(まさにラピッドSSLはそうでした)
中間証明書を設定しないと、PCのブラウザなどでも問題なく(警告なく)表示されても、Androidのブラウザなどではなぜか警告が出るという状態になります。
自分も最初はまりました。。。ちゃんと証明書の発行通知のメールに中間証明書もインストールしてと書いてあるんですけどね(笑)

Apacheではサーバ証明書の他に中間証明書を指定するプロパティがあるのですが、Nginxにはありません。
ならどうするのか?。。。答えは簡単で1ファイルにくっつけてあげますw

# cat www.hoge.jp.crt
-----BEGIN CERTIFICATE-----
発行されたサーバ証明書
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
中間証明書
-----END CERTIFICATE-----

なので、証明書としての中身はこんな感じで2つが一緒に記載された形になります。