Linux
Apache
オレオレ証明書
リダイレクト

SSLを利用するための自己証明書(オレオレ証明書)の設定メモ

More than 3 years have passed since last update.


SSLとは

SSL(Secure Socket Layer)とは、インターネット上で情報を暗号化し、送受信できるプロトコル(一般にhttps://と表記されるもの)。顧客情報やクレジットカード情報、その他、管理情報などを扱う際はこのSSLを利用してセキュアに通信する必要がある。


SSLサーバー証明書

SSLを利用するにはSSLサーバー証明書をインストールする必要がある。正規にはサーバ証明書を購入する必要があるが、ここでは非正規の自己証明書を自分で作成する手順を記載。


秘密鍵(key)の作成

# モジュールのインストール

$ yum -y install mod_ssl

# 秘密鍵の作成
$ openssl genrsa -aes128 2048 > server.key

-aes128は暗号化方式。(詳しくはGoogle先生に…w)使用可能な暗号化方式を確認するには、openssl enc --helpというコマンドを実行すれば一覧表示される。2048という数字は鍵の長さ。なにやら鍵の長さは2048ビット以上が推奨されているので、最低でも2048を指定する。拡張子は.pemもあるけど、個人的には「鍵」なので.keyを使っている。

上記コマンドを実行すると、以下のようにパスフレーズを聞かれるので、任意のものを設定。


Generating RSA private key, 2048 bit long modulus
.............++++++......................++++++
unable to write 'random state'
e is 65537 (0x10001)
Enter pass phrase: パスフレーズ
Verifying - Enter pass phras: パスフレーズ


公開鍵(csr)の作成

CSR(Certificate Signing Request)とは、SSL証明書を作成する元になる情報が記載されているもの。内容は、組織名やサーバのアドレスなどの方法。

# 公開鍵の作成

# server.keyは先ほど作成したもの
$ openssl req -new -key server.key > server.csr

秘密鍵と同様に、上記コマンドを実行すると、以下のようにいろいろ聞かれるので、適宜変更して設定。


Enter pass phrase ofr server.key: パスフレーズ   ←(任意)
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
fi you enter '.', the field will be left blank.
Country Name (2 letter code) [AU]: JP   ←(国名)
State or Province Name (full name) [Some-state]: Tokyo   ←(都道府県名?)
Locality Name (eg, city) []: Shibadaimon, Minato-ku   ←(市区町村名?)
Organization Name (eg, company) [Internet Widgits Pty Ltd]: Example Inc.   ←(会社名)
Organizational Unit Name (eg, section) []: Example Section   ←(?)
Common Name (eg, YOUR name) []: example.com   ←(任意)
Email Address []: hoge@fuga.jp   ←(メールアドレス)

Pleaseenter thee following 'extra' attributes to be sent with your certificate request
A challenge password[]: パスワード   ←(任意)
An optional company name []: hogehoge   ←(任意)

よく分からなかったら、パスフレーズとパスワード以外は空白でも問題なかった(はず)なので、そのままenterでも作成される。


デジタル証明書(crt)の作成

デジタル証明書とは、公開鍵が真正である証明するデータ。正式なものでは、認証局(CA)を通してデータの作成者を証明することができる。

自分も詳しくは理解していないので、ちゃんと調べてみてください。

# デジタル証明書の作成

# server.keyは先ほど作成したもの
$ openssl x509 -in server.csr -days 365000 -req -signkey server.key > server.crt

こちらもコマンドを実行すると、再度パスフレーズを聞かれるので、入力。

Signature ok

subject=/C=JP/ST=Tokyo/L=Shibadaimon,Minato-ku/O=ExampleInc./OU=Example
Section/CN=example.com/emailAddress=hoge@fuga.jp

Getting Private key
Enter pass phrase ofr server.key: パスフレーズ
unable to write 'random state'

最後のパスフレーズはserver.keyを作成した時に設定したものを入力する。

以上で鍵、証明書の作成は終了。


Apacheの設定

Apacheの設定では、通常のhttp(ポート:80)の設定とは別に、https(ポート:443)の設定を行う必要がある。(SSLではポート番号は443)

/etc/httpd/conf/httpd.confまたはhttpd.confにてincludeされる.confファイルのどこでもいいので下記を追記。

<VirtualHost *:443>

SSLEngine on
SSLCertificateFile /etc/httpd/conf/server.crt
SSLCertificateKeyFile /etc/httpd/conf/server.key

... (以下httpでの設定と同様)
</VirtualHost>

鍵ファイルと証明書を上記で指定したディレクトリに移す。最後にApacheを再起動して完了。

以上。