Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed
文書の過去の版を表示しています。
Writing /volume1/Web/Public/dokuwiki/data/log/deprecated/2024-11-15.log failed
目次
Apache2 + PHP5 SSL Installation
Windows環境下でSSLを設定するステップを紹介する。
Prerequisite
SSLの環境を構築する為には次がセットアップされている必要がある。
example of openssl.conf
# # SSLeay example configuration file. # This is mostly being used for generation of certificate requests. # RANDFILE = .rnd #################################################################### [ ca ] default_ca = CA_default # The default ca section #################################################################### [ CA_default ] dir = . # Where everything is kept certs = $dir\certs # Where the issued certs are kept crl_dir = $dir\crl # Where the issued crl are kept database = $dir\index.txt # database index file. new_certs_dir = $dir\newcerts # default place for new certs. certificate = $dir\cacert.pem # The CA certificate serial = $dir\serial # The current serial number crl = $dir\crl.pem # The current CRL private_key = $dir\private\cakey.pem # The private key RANDFILE = $dir\private\private.rnd # private random number file x509_extensions = x509v3_extensions # The extentions to add to the cert default_days = 365 # how long to certify for default_crl_days= 30 # how long before next CRL default_md = md5 # which md to use. preserve = no # keep passed DN ordering # A few difference way of specifying how similar the request should look # For type CA, the listed attributes must be the same, and the optional # and supplied fields are just that :-) policy = policy_match # For the CA policy [ policy_match ] countryName = optional stateOrProvinceName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional # For the 'anything' policy # At this point in time, you must list all acceptable 'object' # types. [ policy_anything ] countryName = optional stateOrProvinceName = optional localityName = optional organizationName = optional organizationalUnitName = optional commonName = supplied emailAddress = optional #################################################################### [ req ] default_bits = 1024 default_keyfile = privkey.pem distinguished_name = req_distinguished_name attributes = req_attributes [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_min = 2 countryName_max = 2 stateOrProvinceName = State or Province Name (full name) localityName = Locality Name (eg, city) 0.organizationName = Organization Name (eg, company) organizationalUnitName = Organizational Unit Name (eg, section) commonName = Common Name (eg, your website's domain name) commonName_max = 64 emailAddress = Email Address emailAddress_max = 40 [ req_attributes ] challengePassword = A challenge password challengePassword_min = 4 challengePassword_max = 20 [ x509v3_extensions ] # under ASN.1, the 0 bit would be encoded as 80 nsCertType = 0x40 #nsBaseUrl #nsRevocationUrl #nsRenewalUrl #nsCaPolicyUrl #nsSslServerName #nsCertSequence #nsCertExt #nsDataType
次はopenssl.confのパスを設定する。 パスを設定する前に、PHPがopenssl.confを探すロジックを知る必要がある。
PHPは以下のロジックにより openssl.conf を探す。
- 環境変数 OPENSSL_CONF が設定された場合、 設定ファイルの(ファイル名を含む)パスとして使用される。
- 環境変数 SSLEAY_CONF が設定された場合、 設定ファイルの(ファイル名を含む)パスとして使用される。
- ファイル openssl.conf はデフォルトの認証エリアに あることが仮定され、openssl DLL がコンパイルされた時間で設定される。 通常、デフォルトのファイル名が c:\usr\local\ssl\openssl.conf であることを 意味する。
証明書を発行する際、 「req_distinguished_name」について、聞かれることになる。 その説明を簡単に次に示す。
項目 | 詳細 |
---|---|
Country Name | 2文字の国コードを入力 |
State or Province Name | 州、県の名前を入力(CAのように省略しない) |
Locality Name | 市の名前を入力 |
Organization Name | 組織の名称を入力(特殊な文字はなるべく避ける &→and) |
Organizational Unit Name | セクション名を入力 |
Common Name | サーバーの別名ではなく、セキュアサーバーの本当の名前(有効なDNS名)を入力 |
Email Address | Webマスターやシステム管理者の電子メールアドレスを入力 |
証明書発行
server.csr(CSRファイル:公開鍵+証明書申請情報)の作成
server.csrの作成するとprivkey.pemが一緒に作られる。こらは後でserver.keyを作成するときに必要になる。
C:\apache2.2\conf>\Apache2.2\bin\openssl req -config ../conf/openssl.conf -new -out server.csr Loading 'screen' into random state - done Generating a 1024 bit RSA private key ....++++++ ..++++++ writing new private key to 'privkey.pem' Enter PEM pass phrase:<パスフレーズ> Verifying - Enter PEM pass phrase:<パスフレーズ> ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- Country Name (2 letter code) []:JP State or Province Name (full name) []:Tokyo Locality Name (eg, city) []:Tokyo Organization Name (eg, company) []:Example Inc. Organizational Unit Name (eg, section) []:Baz Section Common Name (eg, your websites domain name) []:www.example.com Email Address []:master@example.com Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:<Enter>
server.key(秘密鍵)の作成
Apache起動時にパスフレーズの入力が求められるのを防ぐ為に、次のコマンドを実行する。
C:\Apache2.2\conf> \Apache2.2\bin\openssl rsa -in privkey.pem -out server.key Enter pass phrase for privkey.pem:前に入力したパスワード writing RSA key
server.crt(デジタル証明書)の作成
C:\Apache2.2\conf> \Apache2.2\bin\openssl x509 -in server.csr -out server.crt -req -signkey server.key -days 365 Loading 'screen' into random state - done Signature ok subject=/C=JP/ST=Tokyo/L=Tokyo/O=Example Inc./OU=Baz Section/CN=www.example.com/emailAddress=master@example.com Getting Private key
httpd-ssl.conf 修正
続いてSSL設定ファイル(conf/extra/httpd-ssl.conf)を修正する。
修正する部分を次に示す。
修正前 | 修正後 |
---|---|
<VirtualHost _default_:443> | <VirtualHostサーバのIPアドレス:443> |
SSLCertificateFile デフォルトのデジタル証明書パス | SSLCertificateFile 皆さんが生成したデジタル証明書パス |
SSLCertificateKeyFile デフォルトの秘密鍵パス | SSLCertificateKeyFile皆さんが生成した秘密鍵のパス |
設定例を次に示す。
<VirtualHost 192.168.1.104:443> ServerName www.pne-test.com DocumentRoot D:/local/OpenPNE-2.14.4/public_html ErrorLog "C:/Apache2.2/logs/error.log" TransferLog "C:/Apache2.2/logs/access.log" SSLCertificateFile "C:/Apache2.2/conf/server.crt" SSLCertificateKeyFile "C:/Apache2.2/conf/server.key" </VirtualHost>
manual test for Https connection
$ openssl s_client -connect localhost:443 -state -debug GET / HTTP/1.0
コメント
www.charmforbracelets.com