SSL:暗号化(https)サイトのサーバー構築方法
 by ip-domain-search.com
IPドメインSEARCH IPドメインLOOKUP IPドメイン半自動 IPドメイン来訪者ログ WWWサーバへ渡す情報
ドメイン基礎講座 独自ドメインの取得 自社(宅)サーバの構築 複数ドメインの運用 お問合せ・PROFEEL


-- Sponsered Link --

ここでは、SSLを利用した暗号化のhttps通信を行う為のWebサーバーの構築方法について解説します。
 

◎ https通信と従来のhttp通信との違い
◎ https通信に必要な事項を大きく分けると以下の3つに分れます。
  ○1:SSLに必要な ソフトのインストール
  ○2:SSLに必要な SSL証明書の入手
  ○3:SSLに必要な SSL証明書のApacheへの設定


◎ http通信とhttps通信との違い

httpsとは「Hypertext Transfer Protocol Secure」の略称で、SSL/TLSプロトコルにより暗号化されたhttp通信の事です。

ウェブサイトを訪れた際に、ブラウザのURL欄を見ると、「http」から始まっている場合と、「https」から始まっている場合があります。
「http」から始まっている場合は、通常のhttp通信であり、データの送信は平文で行われています。
一方で、「https」から始まっている場合は、SSL/TLSプロトコルを利用した、暗号化通信が行われています。

SSL暗号化通信(https)では、データは暗号化されてやりとりされるため、復号化ができない第3者からは、内容を読むことができない為に安全な通信となります。
 

◎ https通信に必要な事項を大きく分けると以下の3つに分れます。

1:SSLに必要な ソフトのインストール
2:SSLに必要な SSL証明書の入手
3:SSLに必要な SSL証明書のApacheへの設定

○1:SSLに必要な ソフトのインストール

WebサイトをSSL化(https)するには(SSL対応の)Apache と openssl のインストールが必要です
Webサイトが「https」から始まっている場合はSSL/TLSプロトコルを利用した暗号化通信が行われています
(SSLとはSecure Sockets Layer、TLSとは Transport Layer Securityの略です。)

openssl とはUNIX上でSSL/TLSプロトコルを利用した暗号化通信を行うソフトで、Apacheから利用できるソフトです。
貴サーバー上で Apache と openssl のインストールが必要です

なお、私が(FreeBSD上で)使用したバージョンは
WWWサーバー(Apache22)は Apache/2.2.25  を使いました。
opensslのバージョンは現在は ver1.1.0f を使っています。
 

○2:SSLに必要な SSL証明書の入手

WebサーバーをSSL対応にして、httpsで通信する為には SSL証明書が必要です。

SSL証明書は認証局が発行(有料)します。
認証局にSSL証明書(crtファイル)を発行して貰うためには、CSRファイルを準備する必要があります。
CSRファイルは、貴サーバー上でopensslのコマンドを使って秘密鍵の作成と一緒に作成します。

秘密鍵とSSL証明書(crtファイル)はApcheのSSL設定に必要です。
CSRファイルは認証局がSSL証明書(crtファイル)を発行する際に必要です。


CSRファイル、秘密鍵の作製方法


# cd /etc/ssl
# openssl genrsa -aes256 2048 > domain-name.key
# openssl req -new -key domain-name.key -out domain-name.csr -sha256
# openssl rsa < domain-name.key > domain-name_withpass.key

ROOTで、/etc/ssl ディレクトリへ移動(無ければ作成)して下さい。
# cd /etc/ssl

opensslで秘密鍵とCSRファイルを生成しますが、 その前にパスフレーズ(パスワードの様なもの)を決めて、忘れない用にしておいて下さい。

秘密鍵を作成します。 (青字が変更部分)
# openssl genrsa -aes256 2048 > domain-name.key
   ( パスフレーズの入力・再入力を求められます。)
   ( -aes256の部分は -des3他 でもOKです )
   ( domain-name.keyの部分は 秘密鍵 の名前です。 任意の英数字でOKです。 )


アクセス権を変更します。
# chmod 400 domain-name.key

秘密鍵からCSRファイルを生成します。
# openssl req -new -key domain-name.key -out domain-name.csr -sha256

   ( domain-name.csrの部分はCSRファイルの名前です。 任意の英数字でOKです。 )
   ( CSRファイル作成時にはパスフレーズ以外に多くの大事な質問がありますので慎重に入力して下さい。サーバー証明書に書き込まれます。)

  Country Name (2 letter code) [**]: JP
  State or Province Name (full name) [***]: Hyogo # 都道府県(登記されている住所)
  Locality Name (eg, city) [***]: Kobe # 市or区(登記されている住所)
  Organization Name (eg, company) [***]: ooo Inc. # 会社名 又はwhoisの登録名
  Organizational Unit Name (eg, section) [***]: # 部署名(省略可)
  Common Name (eg, your name or your server's hostname) [***]: www.(** your domain-name **) # SSL化するドメインのホスト名

  Email Address []: # メールアドレス(省略可)
  Please enter the following 'extra' attributes to be sent with your certificate request
  A challenge password []: #(省略可)
  An optional company name []: #(省略可)


(後述しますが、Webサーバーの再起動時に毎回求められるパスフレーズの入力をしなくても起動する様に、私はパスフレーズ付きの秘密鍵を生成しています。)
# openssl rsa < domain-name.key > domain-name_withpass.key
   ( パスフレーズの入力を求められます。)

任意の認証局サイトで、任意のSSL証明書を選択します。


認証局は「SSL認証局」などのキーで検索して、お好みの認証局を選んで下さい。

SSL証明書には3種類(DV認証、OV認証、EV認証)あります。
◎ DV認証 はドメイン名の使用権のみを認証します。
◎ OV認証 はドメイン名の使用権の認証に加え、申請した組織の実在性を認証します。
◎ EV認証 はドメイン名の使用権の認証に加え、申請した組織の実在性を登記簿謄本等や第三者機関のデータベース等により法的・物理的に組織の実在性を確認し認証します。

SSL証明書の発行申し込みに際し、申し込みが間違いでは無いかをメールで確認されます。
そのためにadmin@(your domain-name) のメールアドレスで受信出来るようにしておいて下さい。
そして、認証局サイトで確認メールの送信先として admin@(your domain-name) を選択して下さい。

(最近はメールでの確認ではなく、認証局指定のフォルダーを作製し、そのフォルダーに認証局指定のファイルをコピーする様に指示され、認証局からそのファイルの存在を確認するという確認方法も使われているようです。)

順番は前後するかも知れませんが、次頁で、CSRファイルを貼り付ける様に促されます。

次は認証局へのお支払いです。

認証局への支払いの確認が終われば、admin@(your domain-name) 宛にメールが届き、 SSL証明書(crtファイル)や中間証明書が送られて来ます。 (又はSSL証明書(crtファイル)や中間証明書の在るurlを教えてきます。)

そのSSL証明書(crtファイル)や中間証明書をファイルにセーブして、他のファイルと同じフォルダー(/etc/ssl/)に保存して下さい。

これで /etc/ssl フォルダーには
domain-name.key
domain-name.csr
domain-name_withpass.key
domain-name.crt
中間証明書ファイル
の5つのファイルが在る筈です。


これら5つのファイルはroot のみが読むことのできるディレクトリに置く必要がありますので、/etc/ssl の属性を 700 に変更しておきます。


○3:SSLに必要な SSL証明書のApacheへの設定

Apache22の場合で説明します。

Apache22の設定ファイル:httpd.confの内で
# Secure (SSL/TLS) connections 
の次の行が
#Include etc/apache22/extra/httpd-ssl.conf 
であれば
Include etc/apache22/extra/httpd-ssl.conf
とコメントを解除して下さい。

httpd-ssl.confを編集します。
vi /usr/local/etc/apache22/extra/httpd-ssl.conf

私は複数ドメインをSSL対応にしたので、httpd-ssl.conf中の
Listen 443 
の次の行に
NameVirtualHost *:443
を追加しました。

次にhttpd-ssl.conf中の
<VirtualHost _default_:443> ~ </VirtualHost>
をコピーして
<VirtualHost *:443> ~ </VirtualHost>
に変更し、ドメイン毎に追加しています。

(元の <VirtualHost _default_:443> ~ </VirtualHost> はコメントアウトします)


<VirtualHost *:443>の変更箇所 (青字が変更部分)

<VirtualHost *:443>
DocumentRoot "/home/****/public_html/data"
ScriptAlias /cgi-bin/ "/home/****/public_html/cgi-bin/"
ServerName www.(** your domain-name **):443
SSLCertificateFile "/etc/ssl/domain-name.crt"
#SSLCertificateKeyFile "/etc/ssl/domain-name.key"
   (Webサーバーの再起動時に毎回パスフレーズの入力を求められます。再起動したまま放置していたら何時まで待ってもパスフレーズ入力画面のままでサーバーが起動しません。)
SSLCertificateKeyFile "/etc/ssl/domain-name_withpass.key"
   (Webサーバーの再起動時に毎回求められるパスフレーズの入力をしなくても起動する様に、私は秘密鍵としてパスフレーズ付きの秘密鍵を設定しています。)

SSLCertificateChainFile "/etc/ssl/中間証明書ファイル名"
ServerAdmin admin@(** your domain-name **)

ErrorLog "/var/log/httpd/ssl_error.log"
TransferLog "/var/log/httpd/ssl_access.log"

SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite HIGH:MEDIUM:!aNULL:!MD5
<FilesMatch "\.(cgi|shtml|phtml|php)$">
SSLOptions +StdEnvVars
</FilesMatch>
<Directory "/home/****/public_html/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
BrowserMatch "MSIE [2-5]" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog "/var/log/httpd/ssl_request.log" \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>


以下の内容を保存しWebサーバーを再起動してください。

ブラウザに https://www.(** your domain-name **) と入力すると画面が表示されましたか?
ブラウザのURL欄に https://www.(** your domain-name **) と表示されていますか?
ブラウザのURL欄に 鍵のようなマークが表示されていますか?
ブラウザ(CHROME)のURL欄の https://の前に「保護された通信」という文字が表示されていますか?

以上を確認できれば貴サイトのSSL(暗号化)は完了です。

◎ httpsサイトとhttpサイトの今後の方針とその設定

httpsサイトとhttpサイトの今後の方針は以下の3通りかと思われます。

(1)httpsサイトとhttpサイトは違う内容を表示する。
(2)httpsサイトとhttpサイトは同じ内容を表示しているが、おのおの独立して存在する。
(3)httpサイトへのアクセスは全てhttpsサイトへ導く。


(1)の場合は、 httpd-vhosts.confに書かれているhttpサイト用の情報と httpd-ssl.confに書かれているhttpsサイト用の情報とは別のフォルダーになります。

(例)httpd-vhosts.conf に書かれているhttpサイト用の情報
<VirtualHost *:80>
    ・
DocumentRoot /home/******/public_html/data
ScriptAlias /cgi-bin/ "/home/******/public_html/cgi-bin/"
ServerName www.(** your domain-name **)
    ・
</VirtualHost>

(例)httpd-ssl.conf に書かれているのhttpsサイト用の情報
<VirtualHost *:443>
    ・
DocumentRoot "http用と別のdata用フォルダー"
ScriptAlias /cgi-bin/ "http用と別のcgi-bin用フォルダー"
ServerName www.(** your domain-name **):443
    ・
</VirtualHost>

ブラウザのURL欄はhttp://www.(** your domain-name **)とhttps://www.(** your domain-name **)となり内容は別の サイトが表示されます。


(2)の場合は、
httpd-vhosts.confに書かれているhttpサイト用の情報と httpd-ssl.confに書かれているhttpsサイト用の情報とは同じフォルダーになります。

httpd-vhosts.conf に書かれているhttpサイト用の情報
<VirtualHost *:80>
    ・
DocumentRoot /home/******/public_html/data
ScriptAlias /cgi-bin/ "/home/******/public_html/cgi-bin/"
ServerName www.(** your domain-name **)
    ・
</VirtualHost>

httpd-ssl.conf に書かれているのhttpsサイト用の情報
<VirtualHost *:443>
    ・
DocumentRoot /home/******/public_html/data
ScriptAlias /cgi-bin/ "/home/******/public_html/cgi-bin/"
ServerName www.(** your domain-name **):443
    ・
</VirtualHost>

ブラウザのURL欄はhttp://www.(** your domain-name **)とhttps://www.(** your domain-name **)となり別サイトですが内容は同じものが表示されます。


(3)の場合は、(2)と同様ですが httpd-vhosts.confのhttpサイト用の情報に
Redirect 301 / https://www.(** your domain-name **)
の行を追加する事で簡単に実現できます。
もしくは、DocumentRootで指定したフォルダーに.htaccessファイルを置く事で実現できます。 (.htaccessファイルの書き方等はネットで検索して下さい。)

httpd-ssl.confに書かれているhttpsサイト用の情報は(2)と同様です。

http://www.(** your domain-name **)へアクセスしても、https://www.(** your domain-name **)へアクセスしても、ブラウザのURL欄は常にhttps://www.(** your domain-name **)と表示されます。

(例)httpd-vhosts.conf に書かれているhttpサイト用の情報

<VirtualHost *:80>
    ・
DocumentRoot /home/******/public_html/data
ScriptAlias /cgi-bin/ "/home/******/public_html/cgi-bin/"
ServerName www.(** your domain-name **)
    ・
Redirect 301 / https://www.(** your domain-name **)     # 301リダイレクトと呼ばれる方式です
    ・
</VirtualHost>

(例)httpd-ssl.conf に書かれているのhttpsサイト用の情報
( (2)と同じです。 )

<VirtualHost *:443>
    ・
DocumentRoot /home/******/public_html/data
ScriptAlias /cgi-bin/ "/home/******/public_html/cgi-bin/"
ServerName www.(** your domain-name **):443
    ・
</VirtualHost>

( もし、http側を.htaccessファイルでリダイレクトさせる場合は、https側も同じフォルダーを使っていますので、混乱を避ける為に httpd-ssl.confに
AccessFileName .htaccess_s
の行を追加して、.htaccessファイルと区別しておく方が安全です。 )
   

誤字脱字があった場合はEメールでお知らせ下さいますようにお願い申し上げます。


Copyright(c) {{year}} ip-domain-search.com  All rights reserved.




IPドメインSEARCH IPドメインLOOKUP IPドメイン半自動 IPドメイン来訪者ログ WWWサーバへ渡す情報
ドメイン基礎講座 独自ドメインの取得 自社(宅)サーバの構築 複数ドメインの運用 お問合せ・PROFEEL
goeika.com ご詠歌.com 御詠歌.com