SSLとは…?
SSL(Secure Socket Layer)は、インターネット上で送受信されるデータを暗号化する機能のことです。例えば、個人情報を扱う場面、特にクレジットカードの番号やネットバンキングなどへのログイン情報など、お金に関わる部分で多く使われています。
現在使われている暗号化は、公開鍵暗号方式というが主流です。公開鍵暗号方式では、インターネット上に暗号化用の鍵を公開し、自分宛のデータをその公開鍵によって暗号化してもらいます。自分に届いた暗号データを自分だけが持っている秘密鍵を使って解読します。

認証局とその役割
暗号化通信を行うための鍵は、本来ベリサインやグローバルサインなどの認証局にお金を払って発行してもらうのですが、自分で作ることも可能です。自分で作る分には無料で作れます。通信の暗号化も可能です。
では、なぜわざわざお金を払って鍵を発行してもらうことがあるのか…?
それは、SSLによる認証では通信の暗号化だけでなく、発信者の身分証明(実在証明)の役割も兼ねているからです。暗号化に使う鍵にデジタル証明書による署名を行い、発信者の身分を証明します。

ペットなんかは血統書が、絵画や骨董品なんかは鑑定書があった方が信頼できますよね?あれと同じで、鍵に対し、認証局が「この鍵は○○さんのものですよ」ということを証明してくれるわけです。
このデジタル証明書は公開鍵とセットで扱われるので、公開鍵の中にデジタル証明書が組み込まれる形になります。当然、この署名も暗号化されて組み込まれるので、鍵の偽装は困難です。
認証局を通じて発行された証明書と鍵を使った場合、ブラウザのアドレスバーに鍵のマークと緑色の背景が表示されます。

鍵のマークは暗号化通信を行っているということ、緑色の背景は身分が証明されていることをそれぞれ表しています。
暗号化鍵の自己発行
企業などでは信頼性が重要なので、認証局を使って身分の証明を行いますが、自分しか使わないような自宅サーバの場合、暗号化を主な用途とする場合、自前の認証局で十分役割を果たすので、今回は自前で準備したいと思います。
暗号化キー生成ルールの設定
CentOS 5にインストールされているSSLでは、有効期限が1年、1024bitの暗号化キーを生成します。
たくさんの顧客情報を抱える大企業のサーバならともかく、個人で運営する自宅サーバなので、有効期限は10年程度に変更しておきます。
[root@co ~]# cd /etc/pki/tls/certs/
[root@co ~]# sed -i 's/365/3650/g' Makefile
さらに、1024bitでは暗号の強度が弱いので、2048bitに変更します。
[root@co ~]# sed -i 's/1024/2048/g' Makefile
デジタル証明書および鍵の生成
設定を変更したので、早速暗号化鍵を生成します。
デジタル証明書を作成します。このデジタル証明書には公開鍵も含まれます。また、証明書の発行過程で秘密鍵も同時に生成されます。
途中、パスフレーズの入力を求められるので、自由に設定してください。ただし、後で削除してしまうため、簡単なものでも結構です(暗号化には影響ありません)。
[root@co ~]# make server.crt
umask 77 ; \
/usr/bin/openssl genrsa -des3 2048 > server.key
Generating RSA private key, 2048 bit long modulus
........+++
.................+++
e is 65537 (0x10001)
Enter pass phrase:適当なパスフレーズ
Verifying - Enter pass phrase:再入力
umask 77 ; \
/usr/bin/openssl req -utf8 -new -key server.key -x509 -days 3650 -out server.crt -set_serial 0
Enter pass phrase for 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,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [GB]:JP (国)
State or Province Name (full name) [Berkshire]:NAGANO (都道府県)
Locality Name (eg, city) [Newbury]:Suwa (市町村)
Organization Name (eg, company) [My Company Ltd]:kimamabi (団体名)
Organizational Unit Name (eg, section) []:
Common Name (eg, your name or your server's hostname) []:kimamabi. biz (取得したドメイン)
Email Address []:管理者のE-メールアドレス
デジタル証明書と鍵の生成が終わりました。
しかし、このままでは暗号化通信を行う度に、先に設定したパスフレーズを入力する必要があります。これは面倒なので、暗号化キーからパスフレーズを削除し、入力を省きます。
[root@co ~]# openssl rsa -in server.key -out server.key
Enter pass phrase for server.key:パスフレーズの入力
writing RSA key
最後にパーミッションの設定をして、暗号化キーの生成は完了です。
[root@co ~]# chmod 400 server.*
[root@co ~]# ls -l
合計 516
-rw-r--r-- 1 root root 2295 6月 21 21:24 Makefile
-rw-r--r-- 1 root root 468638 3月 5 20:26 ca-bundle.crt
-rw------- 1 root root 1419 6月 21 20:43 localhost.crt
-rwxr-xr-x 1 root root 610 3月 5 20:26 make-dummy-cert
-r-------- 1 root root 1623 6月 21 21:30 server.crt
-r-------- 1 root root 1675 6月 21 21:37 server.key
参考にしたサイト様
CentOSで自宅サーバー構築 - Webサーバー間通信内容暗号化(Apache+mod_SSL)
今回新しく登場したコマンド
- make
[広告]

トップページ
Rocky Linux 8
CentOS 7
Scientific Linux 6
CentOS 5
○準備
○VMware Player
○Hyper-V(Win Proのみ)
○導入
○セキュリティ対策
○Dynamic DNS
○NTPサーバ
○データベース
○WEBサーバ
○FTPサーバ
○メールサーバ
○DNSサーバ
○ファイルサーバ
○ブログシステム
○その他