Apache-SSL+OpenSSL でも構築できるがモジュールとして使える mod_ssl+OpenSSL で構築することにする
#contents
*必要なパッケージの入手 [#vc9270ef]
apache_1.3.33.tar.gz -> http://www.apache.org/~
mod_ssl-2.8.22-1.3.33.tar.gz -> http://www.modssl.org/

*OpenSSLのインストール [#n46c7a4f]
opensslとopenssl-develはrpmパッケージでインストールされているものとする

*mod_sslのコンパイルとApacheのインストール [#y97d290d]
RedHat9でKerberosのヘッダが /usr/kerberos/include にあるためmakeエラーが発生します~
export CPPFLAGS=-I/usr/kerberos/include や export CPPFLAGS="-DOPENSSL_NO_KRB5" を試したけどうまくいかないので、以下のようにヘッダファイルをコピーしました

 # cp /usr/kerberos/include/*.h /usr/include
 # tar xvzf apache_1.3.33.tar.gz
 # tar xvzf mod_ssl-2.8.22-1.3.33.tar.gz
 # cd mod_ssl-2.8.22-1.3.33
 # OPTIM="-O2" ./configure --with-apache=../apache_1.3.33 --with-ssl=SYSTEM --enable-rule=SHARED_CORE \
 --with-layout=Apache --enable-module=so --enable-module=rewrite
 # cd ../apache_1.3.33
 # make
 # make certificate
 
 Signature Algorithm ((R)SA or (D)SA) [R]:R
 1. Country Name (2 letter code) [XY]:JP ... 国コード(日本なのでJP)
 2. State or Province Name (full name) [Snake Desert]:Shiga ... 州もしくは都道府県
 3. Locality Name (eg, city) [Snake Town]:Otsu ... 市区郡町村
 4. Organization Name (eg, company) [Snake Oil, Ltd]:Self ... 組織名や会社名
 5. Organizational Unit Name (eg, section) [Webserver Team]:Engineer ... 組織内名称
 6. Common Name (eg, FQDN) [www.snakeoil.dom]:www.example.com ... サーバー名
 7. Email Address (eg, name@FQDN) [www@snakeoil.dom]:root@example.com ... 管理者メールアドレス
 8. Certificate Validity (days) [365]:365
 
 Certificate Version (1 or 3) [3]:3
 Encrypt the private key 2005-11-21 (月) 19:39:18 [Y/n]: y
 Enter PEM pass phrase: ... パスフレーズ
 Verifying password - Enter PEM pass phrase: ... 再入力
 
 RESULT: Server Certification Files
 
 o  conf/ssl.key/server.key
    The PEM-encoded RSA private key file which you configure
    with the 'SSLCertificateKeyFile' directive (automatically done
    when you install via APACI). KEEP THIS FILE PRIVATE!
 
 o  conf/ssl.crt/server.crt
    The PEM-encoded X.509 certificate file which you configure
    with the 'SSLCertificateFile' directive (automatically done
    when you install via APACI).
 
 o  conf/ssl.csr/server.csr
    The PEM-encoded X.509 certificate signing request file which
    you can send to an official Certificate Authority (CA) in order
    to request a real server certificate (signed by this CA instead
    of our demonstration-only Snake Oil CA) which later can replace
    the conf/ssl.crt/server.crt file.
 
 WARNING: Do not use this for real-life/production systems
 
 # make install

Signature Algorithm ((R)SA or (D)SA) [R]:R
1. Country Name (2 letter code) [XY]:JP ... 国コード(日本なのでJP)
2. State or Province Name (full name) [Snake Desert]:Shiga ... 州もしくは都道府県
3. Locality Name (eg, city) [Snake Town]:Otsu ... 市区郡町村
4. Organization Name (eg, company) [Snake Oil, Ltd]:Self ... 組織名や会社名
5. Organizational Unit Name (eg, section) [Webserver Team]:Engineer ... 組織内名称
6. Common Name (eg, FQDN) [www.snakeoil.dom]:www.example.com ... サーバー名
7. Email Address (eg, name@FQDN) [www@snakeoil.dom]:root@example.com ... 管理者メールアドレス
8. Certificate Validity (days) [365]:365
*セキュア・サーバID申請準備 [#a814a7ac]
 $ su
 ; 乱数ファイルの作成
 # openssl md5 * > rand.dat
 ; 秘密鍵の作成
 # openssl genrsa -rand rand.dat -des3 1024 > key.pem
 ; パスフレーズを2回入力
 
 # rm -f rand.dat
 
 ; CSR作成(ベリサイン入力用)
 # openssl req -new -key key.pem -out csr.pem
 ; さきほどのパスフレーズを入力
 Country Name : JP
 State or Province Name : Shiga
 Locality Name : Otsu
 Organization Unit Name : system-1
 Common Name : www.example.com
 Email Address
 A challenge password
 An optional company name
 
 ; key.pem, csr.pemは外部メディアに保管します
 ; csr.pemの内容よりベリサインからcert.pemを取得します
 
 # rm -f csr.pem
 # chmod 400 /usr/local/apache/conf/ssl.crt/cert.pem
 # chmod 400 key.pem
 # mv key.pem /usr/local/apache/conf/ssl.key

Certificate Version (1 or 3) [3]:3
Encrypt the private key 2005-11-21 (月) 19:39:18 [Y/n]: y
Enter PEM pass phrase: ... パスフレーズ
Verifying password - Enter PEM pass phrase: ... 再入力
*httpd.confの設定 [#ob915c0d]
 # vi httpd.conf
 
 <IfDefine SSL>
 Listen 80  # HTTP用
 Listen 443 # SSL用
 </IfDefine>
 
 ## ----- ここからの設定意味理解してません
 ## ----- とりあえずdefaultに書いてあったのでそのままコピー 
 ##
 ##  SSL Global Context
 ##
 ##  All SSL configuration in this context applies both to
 ##  the main server and all SSL-enabled virtual hosts.
 ##
 
 #
 #   Some MIME-types for downloading Certificates and CRLs
 #
 <IfDefine SSL>
 AddType application/x-x509-ca-cert .crt
 AddType application/x-pkcs7-crl    .crl
 </IfDefine>
 
 <IfModule mod_ssl.c>
 
 #   Pass Phrase Dialog:
 #   Configure the pass phrase gathering process.
 #   The filtering dialog program (`builtin' is a internal
 #   terminal dialog) has to provide the pass phrase on stdout.
 SSLPassPhraseDialog  builtin
 
 #   Inter-Process Session Cache:
 #   Configure the SSL Session Cache: First the mechanism
 #   to use and second the expiring timeout (in seconds).
 #SSLSessionCache        none
 #SSLSessionCache        shmht:/usr/local/apache/logs/ssl_scache(512000)
 #SSLSessionCache        shmcb:/usr/local/apache/logs/ssl_scache(512000)
 SSLSessionCache         dbm:/usr/local/apache/logs/ssl_scache
 SSLSessionCacheTimeout  300
 
 #   Semaphore:
 #   Configure the path to the mutual exclusion semaphore the
 #   SSL engine uses internally for inter-process synchronization.
 SSLMutex  file:/usr/local/apache/logs/ssl_mutex 
 
 #   Pseudo Random Number Generator (PRNG):
 #   Configure one or more sources to seed the PRNG of the
 #   SSL library. The seed data should be of good random quality.
 #   WARNING! On some platforms /dev/random blocks if not enough entropy
 #   is available. This means you then cannot use the /dev/random device
 #   because it would lead to very long connection times (as long as
 #   it requires to make more entropy available). But usually those
 #   platforms additionally provide a /dev/urandom device which doesn't
 #   block. So, if available, use this one instead. Read the mod_ssl User
 #   Manual for more details.
 SSLRandomSeed startup builtin
 SSLRandomSeed connect builtin
 #SSLRandomSeed startup file:/dev/random  512
 #SSLRandomSeed startup file:/dev/urandom 512
 #SSLRandomSeed connect file:/dev/random  512
 #SSLRandomSeed connect file:/dev/urandom 512
 
 #   Logging:
 #   The home of the dedicated SSL protocol logfile. Errors are
 #   additionally duplicated in the general error log file.  Put
 #   this somewhere where it cannot be used for symlink attacks on
 #   a real server (i.e. somewhere where only root can write).
 #   Log levels are (ascending order: higher ones include lower ones):
 #   none, error, warn, info, trace, debug.
 SSLLog      /usr/local/apache/logs/ssl_engine_log
 SSLLogLevel info
 
 </IfModule>
 
 ## ----- ここからバーチャルドメイン設定
 NameVirtualHost *:80
 
 # HTTP用
 <VirtualHost *:80>
     ServerAdmin root@example.com
     DocumentRoot /home/user/public_html
     ServerName www.example.com
     ErrorLog /usr/local/apache/logs/error_log
     CustomLog /usr/local/apache/logs/access_log combined
 </VirtualHost>
 
 # SSL用
 <IfDefine SSL>
   <VirtualHost *:443>
       SSLEngine on
       SSLCertificateFile /usr/local/apache/conf/ssl.crt/cert.pem
       SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/key.pem
       ServerAdmin root@example.com
       DocumentRoot /home/user/ssl_public_html
       ServerName www.example.com
       ErrorLog /usr/local/apache/logs/error_log
       CustomLog /usr/local/apache/logs/ssl_access_log combined
 
      <Files ~ "\.(cgi|shtml|phtml|php3?)$">
          SSLOptions +StdEnvVars
      </Files>
 
      SetEnvIf User-Agent ".*MSIE.*" \
               nokeepalive ssl-unclean-shutdown \
               downgrade-1.0 force-response-1.0
 
      CustomLog /usr/local/apache/logs/ssl_request_log \
                "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
   </VirtualHost>
 </IfDefine>

RESULT: Server Certification Files

o  conf/ssl.key/server.key
   The PEM-encoded RSA private key file which you configure
   with the 'SSLCertificateKeyFile' directive (automatically done
   when you install via APACI). KEEP THIS FILE PRIVATE!

o  conf/ssl.crt/server.crt
   The PEM-encoded X.509 certificate file which you configure
   with the 'SSLCertificateFile' directive (automatically done
   when you install via APACI).

o  conf/ssl.csr/server.csr
   The PEM-encoded X.509 certificate signing request file which
   you can send to an official Certificate Authority (CA) in order
   to request a real server certificate (signed by this CA instead
   of our demonstration-only Snake Oil CA) which later can replace
   the conf/ssl.crt/server.crt file.

WARNING: Do not use this for real-life/production systems

# make install

セキュア・サーバID申請準備 †
$ su
; 乱数ファイルの作成
# openssl md5 * > rand.dat
; 秘密鍵の作成
# openssl genrsa -rand rand.dat -des3 1024 > key.pem
; パスフレーズを2回入力

# rm -f rand.dat

; CSR作成(ベリサイン入力用)
# openssl req -new -key key.pem -out csr.pem
; さきほどのパスフレーズを入力
Country Name : JP
State or Province Name : Shiga
Locality Name : Otsu
Organization Unit Name : system-1
Common Name : www.example.com
Email Address
A challenge password
An optional company name

; key.pem, csr.pemは外部メディアに保管します
; csr.pemの内容よりベリサインからcert.pemを取得します

# rm -f csr.pem
# chmod 400 /usr/local/apache/conf/ssl.crt/cert.pem
# chmod 400 key.pem
# mv key.pem /usr/local/apache/conf/ssl.key

httpd.confの設定 †
# vi httpd.conf

<IfDefine SSL>
Listen 80  # HTTP用
Listen 443 # SSL用
</IfDefine>

## ----- ここからの設定意味理解してません
## ----- とりあえずdefaultに書いてあったのでそのままコピー 
##
##  SSL Global Context
##
##  All SSL configuration in this context applies both to
##  the main server and all SSL-enabled virtual hosts.
##

#
#   Some MIME-types for downloading Certificates and CRLs
#
<IfDefine SSL>
AddType application/x-x509-ca-cert .crt
AddType application/x-pkcs7-crl    .crl
</IfDefine>

<IfModule mod_ssl.c>

#   Pass Phrase Dialog:
#   Configure the pass phrase gathering process.
#   The filtering dialog program (`builtin' is a internal
#   terminal dialog) has to provide the pass phrase on stdout.
SSLPassPhraseDialog  builtin

#   Inter-Process Session Cache:
#   Configure the SSL Session Cache: First the mechanism
#   to use and second the expiring timeout (in seconds).
#SSLSessionCache        none
#SSLSessionCache        shmht:/usr/local/apache/logs/ssl_scache(512000)
#SSLSessionCache        shmcb:/usr/local/apache/logs/ssl_scache(512000)
SSLSessionCache         dbm:/usr/local/apache/logs/ssl_scache
SSLSessionCacheTimeout  300

#   Semaphore:
#   Configure the path to the mutual exclusion semaphore the
#   SSL engine uses internally for inter-process synchronization.
SSLMutex  file:/usr/local/apache/logs/ssl_mutex 

#   Pseudo Random Number Generator (PRNG):
#   Configure one or more sources to seed the PRNG of the
#   SSL library. The seed data should be of good random quality.
#   WARNING! On some platforms /dev/random blocks if not enough entropy
#   is available. This means you then cannot use the /dev/random device
#   because it would lead to very long connection times (as long as
#   it requires to make more entropy available). But usually those
#   platforms additionally provide a /dev/urandom device which doesn't
#   block. So, if available, use this one instead. Read the mod_ssl User
#   Manual for more details.
SSLRandomSeed startup builtin
SSLRandomSeed connect builtin
#SSLRandomSeed startup file:/dev/random  512
#SSLRandomSeed startup file:/dev/urandom 512
#SSLRandomSeed connect file:/dev/random  512
#SSLRandomSeed connect file:/dev/urandom 512

#   Logging:
#   The home of the dedicated SSL protocol logfile. Errors are
#   additionally duplicated in the general error log file.  Put
#   this somewhere where it cannot be used for symlink attacks on
#   a real server (i.e. somewhere where only root can write).
#   Log levels are (ascending order: higher ones include lower ones):
#   none, error, warn, info, trace, debug.
SSLLog      /usr/local/apache/logs/ssl_engine_log
SSLLogLevel info

</IfModule>

## ----- ここからバーチャルドメイン設定
NameVirtualHost *:80

# HTTP用
<VirtualHost *:80>
    ServerAdmin root@example.com
    DocumentRoot /home/user/public_html
    ServerName www.example.com
    ErrorLog /usr/local/apache/logs/error_log
    CustomLog /usr/local/apache/logs/access_log combined
</VirtualHost>

# SSL用
<IfDefine SSL>
  <VirtualHost *:443>
      SSLEngine on
      SSLCertificateFile /usr/local/apache/conf/ssl.crt/cert.pem
      SSLCertificateKeyFile /usr/local/apache/conf/ssl.key/key.pem
      ServerAdmin root@example.com
      DocumentRoot /home/user/ssl_public_html
      ServerName www.example.com
      ErrorLog /usr/local/apache/logs/error_log
      CustomLog /usr/local/apache/logs/ssl_access_log combined

     <Files ~ "\.(cgi|shtml|phtml|php3?)$">
         SSLOptions +StdEnvVars
     </Files>

     SetEnvIf User-Agent ".*MSIE.*" \
              nokeepalive ssl-unclean-shutdown \
              downgrade-1.0 force-response-1.0

     CustomLog /usr/local/apache/logs/ssl_request_log \
               "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
  </VirtualHost>
</IfDefine>

再起動前の準備 †
*再起動前の準備 [#da987caf]
毎回起動時にパスフレーズを聞かれるのはめんどいし、自動起動も面倒なのでパスフレーズを削除する

# openssl rsa -in /usr/local/apache/conf/ssl.key/server.key -out /usr/local/apache/conf/ssl.key/server.key
PHPを利用している場合はPHPもインストールしなおす必要があります
 # openssl rsa -in /usr/local/apache/conf/ssl.key/server.key -out /usr/local/apache/conf/ssl.key/server.key

&color(red){PHPを利用している場合はPHPもインストールしなおす必要があります};~
apache起動時に -DEAPI うんちゃらで怒られます

あとは以下を変更
-ログローテーションの追加~
-rc.local に記述している起動コマンドを startssl へ~
-mrtgでhttpdプロセス数を監視している場合は snmpd.conf ファイルを編集する必要があるかも

ログローテーションの追加 
rc.local に記述している起動コマンドを startssl へ 
mrtgでhttpdプロセス数を監視している場合は snmpd.conf ファイルを編集する必要があるかも
バーチャルホストの設定を確認するには

$ /usr/local/apache/bin/httpd -S

Apacheの起動 †
# /usr/local/apache/bin/apachectl startssl 
でスタート
普通にstartすればSSLはサポートされず
 $ /usr/local/apache/bin/httpd -S

*Apacheの起動 [#w8fc4c9f]
 # /usr/local/apache/bin/apachectl startssl 
でスタート~
普通にstartすればSSLはサポートされず~
とめるときは stop で同じ


https:// でアクセスし画面が表示されればOK


ネームベースからIPベースのバーチャルホストに移行する †
SSLはプロトコルの特徴によりネームベースのバーチャルホストでは利用できない
2005年1月に初めて知りました(恥) 
ネームベースはHTTPリクエストヘッダに含まれるHostを参照して判別するが、それ以前に証明書を交わす必要があるためです
*ネームベースからIPベースのバーチャルホストに移行する [#gbc82ed9]
SSLはプロトコルの特徴によりネームベースのバーチャルホストでは利用できない~
ネームベースはHTTPリクエストヘッダに含まれるHostを参照して判別するが、それ以前に証明書を交わす必要があるためです~
http://httpd.apache.org/docs/vhosts/name-based.html#namevip

すでにIP192.168.0.1でネームベースで運営しているドメインexample2.comをIP192.168.0.2のIPベースに移行する場合

...
Port 80
ServerName www.example.com
DocumentRoot /www/example
 ...
 Port 80
 ServerName www.example.com
 DocumentRoot /www/example
 
 NameVirtualHost 192.168.0.1
 
 <VirtualHost 192.168.0.1 192.168.0.2>
 DocumentRoot /www/example2
 ServerName www.example2.com
 ...
 </VirtualHost>
 
 <VirtualHost 192.168.0.1>
 DocumentRoot /www/example
 ServerName www.example.com
 ...
 </VirtualHost>

NameVirtualHost 192.168.0.1

<VirtualHost 192.168.0.1 192.168.0.2>
DocumentRoot /www/example2
ServerName www.example2.com
...
</VirtualHost>

<VirtualHost 192.168.0.1>
DocumentRoot /www/example
ServerName www.example.com
...
</VirtualHost>
参考:http://httpd.apache.org/docs/vhosts/examples.html#migrate
#exlink


トップ   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS