※2020/07/12 追記
こちらの記事のほうがより詳細なことが書かれていますので、サクッと設定したい場合は本記事でも良いとは思いますが、ご興味ある方はこちらの記事もおすすめします。
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(Certificate Signing Request) ファイルを作成します.CSR とは 認証局に対し SSL サーバ証明書への署名を申請する情報が記載されているもの。具体的には,組織名やサーバのアドレスなど.
※2021/4/28 追記
@satoshi2001 さんにコメントご指摘いただきましたので,更新しました.
# 公開鍵の作成
# 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を再起動して完了。
以上、ではでは(=゚ω゚)ノ