How to build Internet Server with Linux

last update: 29 Sep 2004

home |index |previous |next |contents

SSL


以下に、apacheのSSL対応について説明します。

ここではRedHat系Linuxの使用を前提とし、rpmパッケージでのインストール方法と、 運用方法を説明します。
6.1 SSL(Secure Socket Layer)
SSL(Secure Socket Layer)は、 を目的としたプロトコルで、Netscape社によって開発されました。 現在の仕様はVersion3.0です。Netscape Communicatorをはじめ、ほとんどのブラウザがSSLに対応しています。

RedHat7.0以降のapacheサーバは、デフォルトでSSL機能が組み込まれています。
6.2 サーバ認証と通信路の暗号化について

    6.2.1 サーバ認証

    SSLのサーバ認証には「証明書」が使われます。 クライアントがサーバに接続する際、サーバは自身を証明する「証明書」を クライアントに送ります。

    一般に使われている「証明書」のフォーマットは、ITUの規格であるX.509です。 これは証明書のバージョン、証明者の情報、証明書の有効期限、 公開キー情報などが含まれています。

    証明書には、サーバ運営者自身が発行する自己署名証明書と、 認証局(Certificate Authority: 以下CA)が発行する証明書があります。

      6.2.1.1 自己署名証明書を使う場合

      自己署名証明書を使う場合は次のようなシーケンスでサーバの認証が行われます。

      1. 事前に自己署名証明書の作成を作成しておく。
      2. クライアントからのアクセスにより、サーバが自己署名証明書を送信する。
      3. クライアントが送られてきた自己署名証明書の内容を信用するか否か決定する。
      4. 認証が完了。


      自己署名証明書を使ったサーバ認証

      クライアントが送られてきた自己署名証明書を信用するか否かについては、明示的に内容表示を行うことが出来ます([apache03.bmp]図“More Info”参照)。 自己署名証明書を使った認証については、トピック「自己署名証明書を作成するには」も参照してください。

      6.2.1.2 CAの証明書を使う場合

      CAの証明書を使ったサーバ認証のシーケンスは、次のようになります。

      1. 事前にCAから証明書を発行してもらう(通常は有料)。
      2. クライアントは、サーバから送られた証明書を信用するか否か決定する。事前にクライアント側のブラウザには複数のCAが登録されている。
        • もし、サーバから送られた証明書が事前に登録されたCAのものであれば、そのサーバを信用する。
        • サーバから送られた証明書が登録されていなければ、CAにアクセスしてサーバが本当に認証を得たサーバか否か確認する。
      3. 認証が完了。


      CA(認証局)の証明書を使ったサーバ認証

      以下に、登録済みのCAの証明書を受け取ったブラウザ画面を示します。ここで“OK”を押すと、サーバを信用したことになり、サーバ認証が完了します。

    6.2.2 通信の暗号化

    通信路の暗号化用共通キーをクライアント-サーバ間で共有するため、鍵交換プロトコルを使って共通キーの交換が行われます。共通キーの交換後は、その共通キーを使って通信路を暗号化します。

6.3 インストール
以下に、 SSL機能を組み込んだapacheのインストール方法(RedHat6.xバージョン向け)、apacheの設定ファイル:httpd.confの編集について解説します。 なお、RedHat7.xに付属するapacheには、予めSSL機能が組み込まれています。

    6.3.1 SSL対応apacheインストール

    rpmパッケージを使った、SSL対応apacheのインストール手順を以下に示します。

      6.3.1.1 パッケージのダウンロード

      次に示すrpmパッケージをダウンロードします。


      rpmパッケージは、例えば、以下のサイトからダウンロードすることができます。
      http://rpm.pbone.net/

      http://rpmfind.net/

      6.3.1.2 パッケージのインストール

      以下の手順でrpmパッケージをコンパイル、インストールします。

      1. opensslのインストール
          % rpm -i openssl-0.9.6b-8.src.i386.rpm
          % rpm -bb /usr/src/redhat/SPECS/openssl.spec
          % rpm -Uvh /usr/src/redhat/RPMS/i386/openssl-0.9.6b-8.i386.rpm
          % rpm -Uvh /usr/src/redhat/RPMS/i386/openssl-devel-0.9.6b-8.i386.rpm

      2. mmのインストール
          % rpm -i mm-1.1.3-2.src.rpm
          % rpm -bb /usr/src/redhat/SPECS/mm.spec
          % rpm -Uvh /usr/src/redhat/RPMS/i386/mm-1.1.3-2.rpm
          % rpm -Uvh /usr/src/redhat/RPMS/i386/mm-devel-1.1.3-2.rpm

      3. ssl対応apacheのインストール
          % rpm -i apache-1.3.20-16.src.rpm
          % rpm -bb /usr/src/redhat/SPECS/apache.spec
          % rpm -Uvh /usr/src/redhat/RPMS/i386/apache-1.3.20-16.rpm
          % rpm -Uvh /usr/src/redhat/RPMS/i386/apache-devel-1.3.20-16.rpm


6.4 運用
SSL対応のapacheを運用するには、 httpd.conf設定ファイルの編集、証明書の作成が必要です。

    6.4.1 設定ファイル:httpd.confの編集

    以下に、SSLに関連するディレクティブについてまとめます。

    なお、RedHat7.0以降に付属するapacheには、以下の設定が既になされています。
    ディレクティブ 説明 デフォルト値
    SSLEngine SSLを有効にするか無効にするか。[on|off] on
    SSLCertificateFile 自己署名証明書を保存しているファイル /etc/httpd/conf/ssl.crt/server.crt
    SSLCertificateKeyFile 自己署名証明書の秘密キーを保存しているファイル /etc/httpd/conf/ssl.key/server.key
    SSLCACertificatePath CAの証明書を保存しているディレクトリ /etc/httpd/conf/ssl.crt
    SSLCACertificateFile CAの証明書を保存しているファイル /etc/httpd/conf/ssl.crt/ca-bundle.crt
    SSLVerifyDepth クライアントの証明書を確認するために必要なCA証明書の数 10
    SSLLogFile SSL接続のログファイル /var/log/httpd/ssl_engine_log
    SSLSessionCacheTimeout SSLセッションのキャッシュの有効期間.単位は秒 300
    SSLMutex 複数起動しているhttpdプロセス間の排他制御を行う方式を指定.選択肢は別途 file:logs/ssl_mutex

    SSL関連のディレクティブ

    SSLMutexの選択肢は次の通り:
    none 排他制御を行わない
    file: filenameをロックファイルとして使用
    sem SystemV UPCセマフォを使用

    通常は、デフォルト設定値のままで問題無いでしょう。

    なお、RedHat6.xとRedHat7.xでは、DocumentRootディレクティブのデフォルト値が異なります。
    バージョン ディレクティブ
    RedHat6.x /home/httpd/html
    RedHat7.x /var/www/html

    DocumentRootディレクティブのデフォルト値

    上記の方法でSSL機能を組み込んだapacheをインストールした場合、RedHat7.xのデフォルト値が使われます。適宜、httpd.confファイルのDocumentRootディレクティブと、同時にDirectoryディレクティブを変更してください。
    	--- 略 ---
    
    	## DocumentRoot /var/www/html		# Redhat7.x -> Redhat6.x
    	DocumentRoot /home/htmld/html
    
    	--- 略 ---
    
    	## <Directory "/var/www/html">		# Redhat7.x -> Redhat6.x
    	<Directory "/home/htmld/html">
    
    	--- 略 ---
    

    DocumentRootディレクティブの変更例(/etc/httpd/conf/httpd.conf)


    6.4.2 SSLポート

    SSLはTCPの443番ポートを利用しますので、外部から443番ポートへのアクセスを許可してください。

    6.4.3 証明書の作成

    自己署名証明書を生成するか、CAの証明書を取得して設定します。

      6.4.3.1 自己署名証明書の作成

      /etc/httpd/confディレクトリで"make testcert"コマンドを実行すると、自己署名証明書を作成することができます。
      以下に、具体的な手順を示します。

      1. デフォルト証明書の削除
        はじめに、デフォルトで準備されているサーバキーファイル:/etc/httpd/conf/ssl.key/server.keyと、サーバ認証ファイル: /etc/httpd/conf/ssl.crt/server.crtを削除します。
          % cd /etc/httpd/conf
          % rm ssl.key/server.key
          % rm ssl.crt/server.crt

      2. 自己署名証明書作成
        次に、"make testcert"コマンドを実行します。
        途中でパスフレーズを入力します。このパスフレーズはhttpdサーバを起動するときに使用します。
          % make testcert
          umask 77 ; \
          /usr/bin/openssl genrsa -des3 1024 > /etc/httpd/conf/ssl.key/server.key
          Generating RSA private key, 1024 bit long modulus
          .......................................................................++++++
          ----------++++++
          e is 65537 (0x1001)
          Enter PEM pass phrase: <-パスフレーズ入力
          Verifying password - Enter PEM pass phrase: <-パスフレーズ再入力

        パスフレーズを入力後、サイト情報: 国名、都道府県名、市町村名、組織名、部署名、サーバ名、e-mailアドレス、 を入力します。 ここで入力したサイト情報は、サーバ認証時にクライアント側のブラウザに表示されます。
          Country Name (2 letter code) [AU]:JP
          State or Province Name (full name) [Some-State]:Kanagawa
          Locality Name (eg, city) []:Yokohama
          Organization Name (eg, company) [Internet Widgits Pty Ltd]:TestDomain
          Organizational Unit Name (eg, section) []:net
          Common Name (eg, your name or your server's hostname) []:localserver
          Email Address []:user01@localserver.TestDomain.net

        これで自己署名証明書が作成されます。
      3. httpdの起動
        自己署名証明書を作成した後、httpdサーバを起動します。起動時にパスフレーズの入力を要求されますので、自己署名証明書作成時に使用したパスフレーズを入力します。
          % /etc/rc.d/init.d/httpd start
          httpdを起動中:
          Apache/1.3.20 mod_ssl/2.8.4 (Pass Phrase Dialog)
          Some of your private key files are encrypted for security reasons.
          In order to read them you have to provide us with the pass phrases.

          Server localhost 443 (RSA)
          Enter pass phrase: <- パスフレーズ入力

          Ok: Pass Phrase Dialog successful.

          Ok: Pass Phrase Dialog successful.
          [ OK ]

      4. ブラウザからアクセス
        SSLを使ってhttpdサーバにアクセスするには、プロトコルを"https"とします。

        実際にhttpsでアクセスしたときのブラウザ表示を、[apache04.bmp]図に示します.ブラウザ側では、サーバを信用するか否か尋ねられます。

        ここで"More Info"を押すと、サーバの自己署名証明書作成時のサイト情報が表示されます。


      6.4.3.2 証明書の認証局(CA

      現在、多数のCAが存在します。次に代表的なCAを示します。


      各社とも、様々なバリエーションの証明書を発行しています。暗号強度の違い、証明書の利用範囲の違い、などによって価格もサービスも様々です。

      次に示すURLにVeriSign社、Thawte社から証明書を購入する手続きについて、詳細な説明があります。

      http://www.jp.redhat.com/support/manuals/rhl-rg-ja-7.0/index.html
      「第5章 セキュアサーバの証明書を取得する」を参照してください。
6.5 RPMコマンドのバージョンアップ
mm-1.1.3-2.src.rpmは、バージョン4.0以上のrpmコマンドが必要です(RedHat6.2のrpmコマンドはバージョン3.x)。 rpmコマンドのバージョンアップは、次のように行います。

    6.5.1 rpmパッケージのダウンロード

    次に示すrpmパッケージをダウンロードします。
    	db3-3.1.17-4.6x.i386.rpm
    	db3-devel-3.1.17-4.6x.i386.rpm
    	tcl-8.0.5-35.i386.rpm
    	db3-utils-3.1.17-4.6x.i386.rpm
    
    
    rpm-4.0.2-6x.i386.rpm rpm-devel-4.0.2-6x.i386.rpm rpm-build-4.0.2-6x.i386.rpm rpm-python-4.0.2-6x.i386.rpm popt-1.6.2-6x.sparc.rpm

    6.5.2 パッケージのインストール(アップデート)

    次の手順でrpmパッケージをインストール(アップデート)します。
      % rpm -Uvh db3-3.1.17-4.6x.i386.rpm
      % rpm -Uvh db3-devel-3.1.17-4.6x.i386.rpm
      % rpm -Uvh tcl-8.0.5-35.i386.rpm
      % rpm -Uvh db3-utils-3.1.17-4.6x.i386.rpm

      % rpm -Uvh rpm-4.0.2-6x.i386.rpm
      % rpm -Uvh rpm-devel-4.0.2-6x.i386.rpm
      % rpm -Uvh rpm-build-4.0.2-6x.i386.rpm
      % rpm -Uvh rpm-python-4.0.2-6x.i386.rpm
      % rpm -Uvh popt-1.6.2-6x.sparc.rpm

    参考:
    http://www.zdnet.co.jp/help/tips/linux/l0334.html


home |index |previous |next |contents


since 04/Oct/2004