SSL(Secure Socket Layer)
インターネットなどのTCP/IPネットワークでデータを暗号化して送受信するプロトコルの一つ。データを送受信する一対の機器間で通信を暗号化し、中継装置などネットワーク上の他の機器による成りすましやデータの盗み見、改竄などを防ぐことができる。
SSLを使ったHTTPをHTTPSと呼び、URLは「https://」から始まる
SSLの機能について
相互認証
通信相手のサーバーやクライアントが信用できるかどうか調べる。
通信相手の証明書をCA(Certificate Authority:認証局)を介して検証することで認証を行い、サーバーやクライアントの成りすましを防ぎ安全な通信を確保する。
データの完全性
データが改竄されていないかどうか調べる。電子著名という技術を使い、データが確かに相手から送られてきたものかどうか、送信されたすべてのデータが届いているかどうかを確認できる。
プライバシー
データの盗聴を防ぐ。通信内容を暗号化することで、通信途中のデータを盗み見られないようにする
ApacheでSSL導入に必要なソフトウェア
OpenSSL
SSL機能を提供するオープンソースのソフトウェア。
mod_ssl
OpenSSLを使ってApacheをSSLに対応させるモジュール。
CAに認証してもらう仕組み
SSLにはCA(Certificate Authority:認証局)という概念があり、CAがWebサーバーが本物であるかどうか証明することで、Webサーバーの成りすましを防ぐ。
SSLに対応したWebサイトを構築するときに、CAに自分のWebサイトを登録し証明書を発行してもらう。Webサーバーは証明書をWebブラウザに送り、Webブラウザは自身の持っているCAの情報を元に送られた証明書が正しいかどうか判断する。Webブラウザに登録されていないCAが発行した証明書の場合、ユーザーに証明書を信用するかどうか。ダイアログボックス等で確認を求める。
有名なCA
- ベリサイン
- グローバルサイン
- サイバートラスト
証明書発行手順
1.CSR(Certificate Signal Request)ファイルをCAに送る
2.証明書(Certificate)が送られてくる。この証明書をCSRファイルと同じディレクトリに置き、ssl.confのSSLCertificateFileという項目に証明書のファイル名を設定する
ApacheからSSLを使えるようにする(mod_ssl)
mod_sslモジュールを追加する
OpenSSLの開発用ライブラリをインストールする
$ yum install openssl-devel
コンパイルとインストール
#
#
$ cd /home/vagrant/src/httpd-2.2.27/modules/ssl/
$ /usr/local/apache2/bin/apxs -cia -DHAVE_OPENSSL -I/usr/include/openssl -lssl *.c
テスト用の証明書を作成する
証明書を作る
Webサーバーの鍵を作る
# -des3 :ファイル暗号化はDES3方式を指定
# server.key :生成する鍵のファイル名
# 1024 :鍵の長さ
$ openssl genrsa -des3 -out server.key 1024
証明書を作る
# -days 3650 :有効期限3650日
# -key server.key :サーバー鍵のファイル
# -out server.csr :生成する証明書のファイル
#
$ openssl req -new -days 3650 -key server.key -out server.csr
テスト用に自己署名する
# テストのために正式なCAの代わりに自分で証明書に著名する
$ openssl x509 -req -signkey server.key -days 3650 -in server.csr -out server.crt
鍵のパスフレーズを解除する
$ mv server.key server.key.bak
$ openssl rsa -in server.key.bak -out server.key
ApacheにSSLを設定する
SSLの設定をする
$ vi /usr/local/apache2/conf/httpd.conf
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
$ vi /usr/local/apache2/conf/original/extra/httpd-ssl.conf
Listen 443
#~
#~
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "/usr/local/apache2/htdocs"
ServerName www.example.com:443
ServerAdmin you@example.com
ErrorLog "/usr/local/apache2/logs/error_log"
TransferLog "/usr/local/apache2/logs/access_log"
SSLCertificateFile "/usr/local/apache2/conf/server.crt"
SSLCertificateKeyFile "/usr/local/apache2/conf/server.key"
</VirtualHost>
設定を反映する
$ /usr/local/apache2/bin/apachectl startssl
https://example.com/ にアクセスする