Apache Версия 2.0 Сервера HTTP
решение этой проблемы тривиально и оставляется как осуществление для читателя.
-- стандартное печенье учебника
как решить специфические ограничения безопасности для Того, чтобы SSL-знать webserver не всегда очевидно из-за последовательности между SSL, HTTP и способом Апача обработать запросы. Эта глава дает инструкции о том, как решить такие типичные ситуации. Рассмотрите это как первый шаг, чтобы узнать заключительное решение, но всегда пробовать понять материал прежде, чем Вы используете это. Ничто не хуже чем использование решения для безопасности, не зная его ограничения и последовательность.
следующее создает сервер SSL, который говорит только протокол SSLv2 и его шифры.
SSLProtocol -all +SSLv2
SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP
следующее позволяет только семь самых сильных шифров:
SSLProtocol all
SSLCipherSuite HIGH:MEDIUM
это средство называют Сервером Криптографией Gated (SGC) и детали, которые Вы можете найти в
README.GlobalID
документ в mod_ssl распределении. Вкратце: сервер имеет Глобальное свидетельство сервера удостоверения личности, подписанное специальным свидетельством Калифорнии от Веризигна, который позволяет сильное шифрование в экспортных браузерах. Это работает как следующее: браузер соединяется с экспортным шифром, сервер посылает его Глобальное свидетельство удостоверения личности, браузер проверяет это и впоследствии модернизирует набор шифра прежде, чем любая коммуникация HTTP имеет место. Вопрос теперь: Как может мы позволять эту модернизацию, но предписывать сильное шифрование. Или другими словами: Браузер или должен первоначально соединиться с сильным шифрованием или иметь, чтобы модернизировать к сильному шифрованию, но не позволяется держать экспортные шифры. Следующее добивается цели:
# allow all ciphers for the initial handshake,
# so export browsers can upgrade via SGC facility
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<Directory /usr/local/apache2/htdocs>
# but finally deny all browsers which haven't upgraded
SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128
</Directory>
очевидно Вы не можете только использовать всего сервера
SSLCipherSuite
который ограничивает шифры сильными вариантами. Но mod_ssl позволяет Вам повторно формировать набор шифра во в-справочник контексте и автоматически вынуждает пересмотр параметров SSL встречать новую конфигурацию. Так, решение:
# be liberal in general
SSLCipherSuite ALL:!ADH:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
<Location /strong/area>
# but https://hostname/strong/area/ and below
# requires strong ciphers
SSLCipherSuite HIGH:MEDIUM
</Location>
когда Вы знаете ваше пользовательское сообщество (то есть закрытая пользовательская ситуация группы), поскольку это имеет место например в Интранете, Вы можете использовать простое установление подлинности свидетельства. Все, что Вы должны сделать, должно создать свидетельства клиента, подписанные вашим собственным свидетельством Калифорнии
ca.crt
и затем проверите клиентов против этого свидетельства.
# require a client certificate which has to be directly
# signed by our CA certificate in ca.crt
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/ca.crt
для этого мы снова используем в-справочник особенность переконфигурации
mod_ssl
:
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
ключ должен проверить для различных компонентов свидетельства клиента. Обычно это означает проверять целое или часть Выдающегося Названия (отличительное имя) Предмета. Для этого два метода существует:
mod_auth
базирующийся вариант и
SSLRequire
вариант. Первый метод хорош, когда клиенты имеют полностью различный тип, то есть когда их отличительные имена не имеют никаких общих областей (обычно организация, и т.д.). В этом случае Вы должны установить базу данных пароля, содержащую
все
клиенты. Второй метод лучше, когда ваши клиенты - вся часть общей иерархии, которая закодирована в отличительное имя. Тогда Вы можете соответствовать им более легко.
первый метод:
SSLVerifyClient none <Directory /usr/local/apache2/htdocs/secure/area> SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile conf/ssl.crt/ca.crt SSLCACertificatePath conf/ssl.crt SSLOptions +FakeBasicAuth SSLRequireSSL AuthName "Snake Oil Authentication" AuthType Basic AuthUserFile /usr/local/apache2/conf/httpd.passwd require valid-user </Directory>
/C=DE/L=Munich/O=Snake Oil, Ltd./OU=Staff/CN=Foo:xxj31ZMTZzkVA /C=US/L=S.F./O=Snake Oil, Ltd./OU=CA/CN=Bar:xxj31ZMTZzkVA /C=US/L=L.A./O=Snake Oil, Ltd./OU=Dev/CN=Quux:xxj31ZMTZzkVA
второй метод:
SSLVerifyClient none <Directory /usr/local/apache2/htdocs/secure/area> SSLVerifyClient require SSLVerifyDepth 5 SSLCACertificateFile conf/ssl.crt/ca.crt SSLCACertificatePath conf/ssl.crt SSLOptions +FakeBasicAuth SSLRequireSSL SSLRequire %{SSL_CLIENT_S_DN_O} eq "Snake Oil, Ltd." \ and %{SSL_CLIENT_S_DN_OU} in {"Staff", "CA", "Dev"} </Directory>
позволить нам предполагать, что Интранет можно отличить через IP сеть 192.160.1.0/24, и подобласть на вебсайте Интранета имеет URL
/subarea
. тогда формируйте следующую внешнюю сторону ваш действительный хозяин HTTPS (таким образом это обращается и к HTTPS и к HTTP):
SSLCACertificateFile conf/ssl.crt/company-ca.crt <Directory /usr/local/apache2/htdocs> # Outside the subarea only Intranet access is granted Order deny,allow Deny from all Allow from 192.168.1.0/24 </Directory> <Directory /usr/local/apache2/htdocs/subarea> # Inside the subarea any Intranet access is allowed # but from the Internet only HTTPS + Strong-Cipher + Password # or the alternative HTTPS + Strong-Cipher + Client-Certificate # If HTTPS is used, make sure a strong cipher is used. # Additionally allow client certs as alternative to basic auth. SSLVerifyClient optional SSLVerifyDepth 1 SSLOptions +FakeBasicAuth +StrictRequire SSLRequire %{SSL_CIPHER_USEKEYSIZE} >= 128 # Force clients from the Internet to use HTTPS RewriteEngine on RewriteCond %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$ RewriteCond %{HTTPS} !=on RewriteRule .* - [F] # Allow Network Access and/or Basic Auth Satisfy any # Network Access Control Order deny,allow Deny from all Allow 192.168.1.0/24 # HTTP Basic Authentication AuthType basic AuthName "Protected Intranet Area" AuthUserFile conf/protected.passwd Require valid-user </Directory>