グローバルサインのSSLを使ってサイトをhttpsでアクセスできるようにする

この記事はだいぶ前に書かれたものなので情報が古いかもしれません
さくらインターネットなどのレンタルサーバーを使っている場合は、管理画面からSSLの設定ってのができるから良いんですけど、自分でサーバーを構築した場合はそうもいかない。SSLの設定も自分でやらないといけない。

というわけで、早速やってみましょう。

ちなみに今回は、グローバルサインのSSLを使用しているってことで話を進めます。



SSLが使える状態か確かめる

何はともあれ、まずはサーバーがSSLを使用できる状態になってないとどうしようもないので、必要なものが揃ってるかどうか確認してみましょう。

サーバーの状況によって多少の違いはあるかもしれないんですが、今回の設定の中では、「OpenSSL」ってのと「mod_ssl」というのがサーバーにインストールされていれば大丈夫です。ああ、もちろんapacheもね。

インストールされているかどうかは、コマンドを叩いてバージョンを確認してみれば分かる。

//OpenSSLのバージョン確認
# openssl version

//mod_sslのバージョン確認
# rpm -qa mod_ssl

インストールされていれば何か情報が返って来るし、インストールされていなければ何も返って来ないか、エラーメッセージが出ると思います。

少し調べてみた限りでは、サーバーにOSをインストールするとOpenSSLやmod_sslも一緒にインストールされることもあるらしいんですが、僕の場合は、OpenSSLは入ってたけどmod_sslは入ってませんでした。だから自分でやむった。

//OpenSSLのインストール
# yum -y install openssl

//mod_sslのインストール
# yum -y install mod_ssl

僕がやむったのはmod_sslの方だけですけど、たぶんOpenSSLもこれでいけるはず。



CSRを作成する

さてさて、それじゃあ設定の方をやっていきましょう。

ここではCSRっていうのを作成します。CSRってのは……日本語で言うと、署名要求とか言うんですかね。何にせよ、これを作成しとかないとSSLの導入はできませんよってことですね。

まあ、難しいことはないです。と言うか、CSRの作成も、この後に出てくる証明書のインストールと言うのも、やり方はグローバルサインのホームページに載ってます。だから基本的にはそれに従えば良い。

例えばCSR作成だったら、ここのページから確認することができる。

CSRの作成

ってことで、基本的にはここの内容に従ってやっていきます。



CSRを作成するには、まず秘密鍵を作らないといけません。

グローバルサインに書いてあるやり方だと、こんな感じで秘密鍵を作成することができるって書いてある。

//秘密鍵の保存ディレクトリ
/etc/httpd/conf/ssl.key/

//秘密鍵のファイル名
ssl.globalsign.com.key

//秘密鍵の生成コマンド
# openssl genrsa -des3 -out ./ssl.key/ssl.globalsign.com.key 2048

何だ簡単じゃねーかと思って、ぶっちゃけ僕はここに書いてあるまんまの通りにやったんですが、世の中そうそう上手くはいかねーっつー話っすわ。

まあ、よく読んでみたら、秘密鍵の保存ディレクトリとかファイル名はただの一例で、お客様の環境に合わせて変えろって書いてあるから、そりゃそのままやっても動かないわよね。

じゃあ、どういう風に変えたら良いのかって話なんですが……。

秘密鍵の保存先やファイル名などは、「ssl.conf」の中にちゃーんと書いてある。

というわけで、ssl.confをのぞいてみましょう。

# less /etc/httpd/conf.d/ssl.conf

たぶんだけど、mos_sslをyumでインストールした時点で、ssl.confは勝手に作成されてると思うので、それを見てもらえりゃオッケーです。保存されている場所が上に書いてあるのと違う場合もあるかもしれないけど、その場合はすまん、自分で調べてちょーだいな。もしかしたらhttpd.confの中に一纏めになっている場合もあるかも。

中を見て行くと、こんなことが書いてある行があるはずなので、そこを確認。

SSLCertificateKeyFile /etc/pki/tls/private/localhost.key

これが秘密鍵の保存先(/etc/pki/tls/private/)と、ファイル名(localhost.key)です。僕の環境では、デフォルトはこうなってた。

だからまあ、これを任意に書き換えてやれば、保存先やファイル名を自分で好きに変えられるってことですね。ここではめんどいからこのままデフォルトの設定で話を進めます。

では改めて、秘密鍵の作成ですね。

# openssl genrsa -des3 -out /etc/pki/tls/private/localhost.key 2048

パスワードの設定を求められるので、適当にパスワードを決めて入力します。適当って言っても、あとで使うので忘れないようなやつね。



秘密鍵が作成できたら、これを使ってCSRを作成します。

これも、グローバルサインのヘルプページを見ると、こんな風に書いてある。

//CSRの保存先
/etc/httpd/conf/ssl.csr/

//CSRのファイル名
ssl.globalsign.com.csr

//CSRの作成コマンド
# openssl req -new -key ./ssl.key/ssl.globalsign.com.key -out ./ssl.csr/ssl.globalsign.com.csr

同じ過ちは二度繰り返さない。それが僕の生き方。そういうわけで、これもそのままやらずに、自分の環境に合わせて保存先やらファイル名を変えないといけない。

実際にはしょっちゅう同じ過ちを繰り返してますけどね……僕は。まあそんなことはどーでもいい。

CSRに関しては、特にssl.confに保存先が書いてあるわけでもなくて、ちゃんと作成さえできればどこにあっても大丈夫っぽいので、秘密鍵と同じフォルダ内に「localhost.csr」とかいうファイルでも作ることにしましょう。

「touch」ってコマンドを使うと空のファイルを新規に作成できるので、そいつを使ってみます。

# touch /etc/pki/tls/private/localhost.csr

ファイルができたらCSRの作成コマンドを実行しましょう。

# openssl req -new -key /etc/pki/tls/private/localhost.key -out /etc/pki/tls/private/localhost.csr

コマンドを叩くと、パスワードを入力しろって言われるので、さっき秘密鍵を作ったときに設定したパスワードを入力します。

次に署名を入力しろって言われるので、順番に入力していきます。国名とか、住所とか、コモンネームとかね。

うっかり間違えちゃってもCSRはまた作成し直すことができるようなので、気楽にやって大丈夫だと思います。

無事に入力が終わったら、CSRファイルの中を確認してみます。

//コマンド
# less /etc/pki/tls/private/localhost.csr

//ファイルの中身
-----BEGIN CERTIFICATE REQUEST-----
〜何かよく分からない文字列がだーっと書いてある
-----END CERTIFICATE REQUEST-----

そしたら、ファイルの中身をまるっと全部コピーする。「—–BEGIN CERTIFICATE REQUEST—–」とかもコピーする。これをコピーし忘れると正常に動かない。

コピーしたら、グローバルサインの管理画面にログインして、証明書の発行手続きをする。

実際にグローバルサインを使ったことある人なら分かると思うんですけど、証明書の発行手続きを進めていると、そのうちCSRの入力画面が出て来るんですね。なので、そこでコピーしたCSRを入力します。

ちょっと適当すぎたかな……このプレビュー

何か、こんな感じの画面がね、あるんですよ。



これでCSRの方はオッケーですね。

あとはグローバルサインの方で証明書の発行までこぎつければ、そのうち「発行できたどー」っていうメールが届くので、しばし待たれるが良いでしょう。

あ、その前に一度、承認の確認メールが届くんだっけ。「本当に発行すっぞ。はっ、すっぞ」的なメールが。



証明書のインストール

メールが届いたら、次は証明書のインストールです。これも、基本的には以下のページから閲覧できる内容を参考にやっていきます。

証明書のインストール



さっき、発行出来たどーっていうメールがグローバルサインから届くって言いましたけど、そのメールの中に証明書の情報が載ってるので、それを使うことになります。

まあ、メールじゃなくても、無事に証明書の発行が済んでれば、管理画面から確認することもできますがね。

証明書は普通のサーバー証明書と中間CA証明書っていう二つの証明書があって、どっちも使います。

例によって、グローバルサインのヘルプページに載ってる情報をまずは確認。

//証明書の保存ディレクトリ
/etc/httpd/conf/ssl.crt/

//サーバー証明書のファイル名
ssl.globalsign.com.crt

//中間CA証明書のファイル名
dvcacert.cer

こいつに関しても、ここに書いてある通りの保存先にそのままファイルを作ってもちゃんと動いてはくれないので、ssl.confの中を見て、どこにどんなファイル名で保存したら良いのかを確認します。

//ファイルを開く
# less /etc/httpd/conf.d/ssl.conf

//以下の二行を確認
SSLCertificateFile /etc/pki/tls/certs/localhost.crt
SSLCertificateChainFile /etc/pki/tls/certs/server-chain.crt

これを見ると、証明書の保存先は「/etc/pki/tls/certs/」で、ファイル名がそれぞれ「localhost.crt」と「server-chain.crt」ってなってますね。

この場合、上の「localhost.crt」がサーバー証明書で、「server-chain.crt」が中間CA証明書のファイル名になります。

なので、それぞれのファイルに、メールや管理画面に載っている証明書情報を貼っつける。どっちも「—–BEGIN CERTIFICATE—–」って文字から始まって「—–END CERTIFICATE—–」って文字で終わってるので、丸々コピペする。

証明書のインストールは終わりです。文字をコピッただけだから、インストールとは言わないような気もするけど……まあいっか。



ssl.conf

最後はssl.confの設定です。

//ファイルをviモードで開く
# vi /etc/httpd/conf.d/ssl.conf

//以下の行を設定
DocumentRoot "/var/www/html"
ServerName ホスト名

ホスト名っていうか、この場合はコモンネームって言った方が良いのかな? あかつきのお宿だったら「norm-nois.com」ですね。

基本的にはあれと同じですね。バーチャルホストの設定と同じ感じですね。

バーチャルホストの設定って何やねんって方は、僕もこの前やったんで、そのときの記事を読めばオッケーさ。

バーチャルホストの設定



ちなみに、ワイルドカード証明書を使用している場合は、以下の記述も必要みたいです。

NameVirtualHost xxx.xxx.xxx.xxx:443

「xxx.xxx.xxx.xxx」はIPアドレスね。まあ言わなくても分かるか。

僕は使ってないんですけど、ワイルドカード証明書ってのはあれですね。例えば「norm-nois.com」っていうドメインに対して、「sub.norm-nois.com」とか「test.norm-nois.com」みたいなサブドメインでもSSLを使用したいようなときに使う証明書……で、良いのかな。ワイルドカードじゃない証明書だと、複数のサブドメインには使えない。「sub.norm-nois.com」で使用している証明書を「test.norm-nois.com」で使うことはできない。サイトにアクセスしたとき「証明書の内容と違います」みたいなアラートが出ると思う。その場合はもう一つ証明書を発行しないといけない。

どっちが良いのかは分かりませんけど、その辺は自分の環境に応じてということで。



設定が全部終わったら、apacheを起動します。すでに起動しているなら再起動します。

# service httpd stop
# service httpd start

restartでも良いような気がするんだけど、それだと正常に読み込まれない場合があるらしいとのことで、一応ここでは「stop → start」の手順を踏んでます。

今まではstartすればそれで起動していたと思うんですけど、SSLの設定をした場合、今後はapacheを起動するたびにパスワードの入力が求められます。秘密鍵を作成したときのパスワードを入力すれば、起動できます。






SSLの設定は以上ですねー。これで「https://コモンネーム」にアクセスすれば、無事にサイトが見られるはず。

ああ、ポートの443番が開いてないと、アクセスできないと思いますけどね。その辺はファイアウォールの設定をば。

保存先のディレクトリとかさえ分かれば、設定自体はそんなに難しくないかなーっていうのが、正直な印象ですね。僕はやる前、もっとめんどいものかと思ってたので、そこは助かりました。

まあ、今回はグローバルサインを使ったらっていう話なので、他のところのを使った場合はまた少し設定が違うのかもしれませんが、それはまた別のお話。

ってか、僕は今まで自分で申し込む場合、グローバルサイン以外のSSLって、使ったことないんですよね……他はどうなんだろう。
 もしかしたら何か関連しているかも? 
 質問や感想などお気軽にコメントしてください