web-dev-qa-db-ja.com

複数のディレクトリでのSSL

HttpのWebサイトがありますが、ショッピングカート用の特定のディレクトリのhttps用にポートが設定されています。次に、同じサイトの別のディレクトリでもSSLを使用したいと思います。それを設定するにはどうすればよいですか?

ドキュメント と同様にすべての設定ファイルを調べてみましたが、理解できません。

私もこれをhttpd.configで設定しようとしました

<VirtualHost 127.0.0.1:[ssl port]>   #also tried *:[ssl port] and [actual IP]:[ssl port]
    ServerAdmin [email protected]
    DocumentRoot "C:/path/sslNeededDir"
    ServerName www.example.com
</VirtualHost>

このディレクトリ内のページがsslポートを使用してhttpsになることを期待していますが、それは何もしませんでした。どんな助けも大歓迎です。

更新:これは最終的に移行されました。私はまだこれに関する確かな答えを探しています。誰もが私を助けることができれば、それは大歓迎です。

1
Nick Rolando

エイリアスを使用してこれを行うことは、おそらく最も簡単な方法です。引数のために、これがSSLによって提供されるディレクトリの現在の<VirtualHost>であるとしましょう(興味があるなら、私のdevサーバーから持ち上げられた既知の良い設定):

<VirtualHost 11.22.33.44:443>

  # Basic vhost config
  ServerAdmin [email protected]
  ServerName secure.mysite.com:443

  # Directory configuration
  DocumentRoot "/WebServer/virtualhosts/secure.mysite.com/htdocs"
  <Directory "/WebServer/virtualhosts/secure.mysite.com/htdocs">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  # Logging configuration
  # Rem: ssl logging format defined in httpd.conf
  ErrorLog "/WebServer/virtualhosts/secure.mysite.com/logs/error.log"
  CustomLog "/WebServer/virtualhosts/secure.mysite.com/logs/access.log" ssl

  # SSL configuration
  # Rem: This works properly, fingerpoken ist verboten!
  SSLEngine on
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  SSLCertificateFile "/var/Apache/conf/certs/secure-mysite-com.cert"
  SSLCertificateKeyFile "/var/Apache/conf/certs/secure-mysite-com.key"
  <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory "/var/Apache/cgi-bin">
    SSLOptions +StdEnvVars
  </Directory>
  BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

</VirtualHost>

上記の設定から(できれば)見ることができるように、仮想ホストのルートをリクエストするとき、つまりhttps://secure.mysite.com/をリクエストするとき-ローカルディレクトリ/WebServer/virtualhosts/secure.mysite.com/htdocsを使用します。

また、仮想ホストを適切にセットアップすることは、いくつかのServerNameディレクティブとDocumentRootディレクティブをつなぎ合わせるという些細なケースではありません。期待どおりに正確に調整する必要があります。ほとんどの場合、ホスト固有のロギングが必要です。SSLを使用している場合は、いくつかの基本的な動作を定義し、サーバー側スクリプトで情報を利用できるようにする必要があります。IE特定のコードおよび構成(grrr ...)などなど.

ここで、同じ証明書とホスト名を使用して/WebServer/virtualhosts/secure.someothersite.com/htdocsを提供したいとしましょう。最初に、どのようにアクセスできるようにするかを決定する必要があります。そして、アドレスhttps://secure.mysite.com/someothersite/を使用することを決定します。元のドキュメントルートにシンボリックリンクを作成して、それを実行することもできますが、ローカルファイルシステムで作業する他の人にとっては混乱を招く可能性があります。いいえ、代わりに前述の Alias ディレクティブを使用します。

これの基本的な構文はAlias /url-path /full/file/system/pathです。したがって、次の行が必要です。

Alias /someothersite /WebServer/virtualhosts/secure.someothersite.com/htdocs

ファイルパスのいずれかの末尾にスラッシュを含めるnotを含めたことに注意してください。これは、使用方法が直感的で、期待どおりに動作するために重要です。すばらしい-これで、Apacheは/someothersiteを要求したときに、実際にドキュメントルートにないディレクトリを実際に読みたいと認識します。そして、あなたはそれが仕事だと思うかもしれませんが、待ってください...

<Directory>セクションはどうですか?これはDocumentRootとして定義されたディレクトリへのアクセス許可のみを与えるため、エイリアスディレクトリ用に別のセクションが必要になります。引数のために、元のディレクトリセクションをコピーして貼り付け、適用するパスを変更してみましょう。

<Directory "/WebServer/virtualhosts/secure.someothersite.com/htdocs">
  Options FollowSymLinks ExecCGI
  AllowOverride All
  Order allow,deny
  Allow from all
</Directory>

Now動作します。

最終的な構成を見てみましょう。

<VirtualHost 11.22.33.44:443>

  # Basic vhost config
  ServerAdmin [email protected]
  ServerName secure.mysite.com:443

  # Directory configuration
  DocumentRoot "/WebServer/virtualhosts/secure.mysite.com/htdocs"
  <Directory "/WebServer/virtualhosts/secure.mysite.com/htdocs">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  # Alias for /someothersite virtual directory
  Alias /someothersite /WebServer/virtualhosts/secure.someothersite.com/htdocs
  <Directory "/WebServer/virtualhosts/secure.someothersite.com/htdocs">
    Options FollowSymLinks ExecCGI
    AllowOverride All
    Order allow,deny
    Allow from all
  </Directory>

  # Logging configuration
  # Rem: ssl logging format defined in httpd.conf
  ErrorLog "/WebServer/virtualhosts/secure.mysite.com/logs/error.log"
  CustomLog "/WebServer/virtualhosts/secure.mysite.com/logs/access.log" ssl

  # SSL configuration
  # Rem: This works properly, fingerpoken ist verboten!
  SSLEngine on
  SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  SSLCertificateFile "/var/Apache/conf/certs/secure-mysite-com.cert"
  SSLCertificateKeyFile "/var/Apache/conf/certs/secure-mysite-com.key"
  <FilesMatch "\.(cgi|shtml|phtml|php)$">
    SSLOptions +StdEnvVars
  </FilesMatch>
  <Directory "/var/Apache/cgi-bin">
    SSLOptions +StdEnvVars
  </Directory>
  BrowserMatch ".*MSIE.*" \
    nokeepalive ssl-unclean-shutdown \
    downgrade-1.0 force-response-1.0

</VirtualHost>
1
DaveRandom