LoginSignup
8
11

More than 5 years have passed since last update.

Apache:暗号化されたWEBサーバーを構築する(mod_ssl)

Last updated at Posted at 2015-03-25

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
httpd.conf
# Secure (SSL/TLS) connections
Include conf/extra/httpd-ssl.conf
$ vi /usr/local/apache2/conf/original/extra/httpd-ssl.conf
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/ にアクセスする

8
11
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
11