<-
Apache > HTTP Server > Documentation > Version 2.0 > SSL/TLS

SSL/TLS Сильное Шифрование: С практическими рекомендациями

решение этой проблемы тривиально и оставляется как осуществление для читателя.

-- стандартное печенье учебника

как решить специфические ограничения безопасности для Того, чтобы SSL-знать webserver не всегда очевидно из-за последовательности между SSL, HTTP и способом Апача обработать запросы. Эта глава дает инструкции о том, как решить такие типичные ситуации. Рассмотрите это как первый шаг, чтобы узнать заключительное решение, но всегда пробовать понять материал прежде, чем Вы используете это. Ничто не хуже чем использование решения для безопасности, не зная его ограничения и последовательность.

top

Cipher Suites and Enforced Strong Security

How can I create a real SSLv2-only server?

следующее создает сервер SSL, который говорит только протокол SSLv2 и его шифры.

httpd.conf

SSLProtocol -all +SSLv2
SSLCipherSuite SSLv2:+HIGH:+MEDIUM:+LOW:+EXP

How can I create an SSL server which accepts strong encryption only?

следующее позволяет только семь самых сильных шифров:

httpd.conf

SSLProtocol all
SSLCipherSuite HIGH:MEDIUM

How can I create an SSL server which accepts strong encryption only, but allows export browsers to upgrade to stronger encryption?

это средство называют Сервером Криптографией Gated (SGC) и детали, которые Вы можете найти в README.GlobalID документ в mod_ssl распределении. Вкратце: сервер имеет Глобальное свидетельство сервера удостоверения личности, подписанное специальным свидетельством Калифорнии от Веризигна, который позволяет сильное шифрование в экспортных браузерах. Это работает как следующее: браузер соединяется с экспортным шифром, сервер посылает его Глобальное свидетельство удостоверения личности, браузер проверяет это и впоследствии модернизирует набор шифра прежде, чем любая коммуникация HTTP имеет место. Вопрос теперь: Как может мы позволять эту модернизацию, но предписывать сильное шифрование. Или другими словами: Браузер или должен первоначально соединиться с сильным шифрованием или иметь, чтобы модернизировать к сильному шифрованию, но не позволяется держать экспортные шифры. Следующее добивается цели:

httpd.conf

# 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>

How can I create an SSL server which accepts all types of ciphers in general, but requires a strong ciphers for access to a particular URL?

очевидно Вы не можете только использовать всего сервера 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>

top

Client Authentication and Access Control

How can I authenticate clients based on certificates when I know all my clients?

когда Вы знаете ваше пользовательское сообщество (то есть закрытая пользовательская ситуация группы), поскольку это имеет место например в Интранете, Вы можете использовать простое установление подлинности свидетельства. Все, что Вы должны сделать, должно создать свидетельства клиента, подписанные вашим собственным свидетельством Калифорнии ca.crt и затем проверите клиентов против этого свидетельства.

httpd.conf

# 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

How can I authenticate my clients for a particular URL based on certificates but still allow arbitrary clients to access the remaining parts of the server?

для этого мы снова используем в-справочник особенность переконфигурации mod_ssl :

httpd.conf

SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt

<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>

How can I authenticate only particular clients for a some URLs based on certificates but still allow arbitrary clients to access the remaining parts of the server?

ключ должен проверить для различных компонентов свидетельства клиента. Обычно это означает проверять целое или часть Выдающегося Названия (отличительное имя) Предмета. Для этого два метода существует: mod_auth базирующийся вариант и SSLRequire вариант. Первый метод хорош, когда клиенты имеют полностью различный тип, то есть когда их отличительные имена не имеют никаких общих областей (обычно организация, и т.д.). В этом случае Вы должны установить базу данных пароля, содержащую все клиенты. Второй метод лучше, когда ваши клиенты - вся часть общей иерархии, которая закодирована в отличительное имя. Тогда Вы можете соответствовать им более легко.

первый метод:

httpd.conf

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>

httpd.passwd

/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

второй метод:

httpd.conf

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>

How can I require HTTPS with strong ciphers and either basic authentication or client certificates for access to a subarea on the Intranet website for clients coming from the Internet but still allow plain HTTP access for clients on the Intranet?

позволить нам предполагать, что Интранет можно отличить через IP сеть 192.160.1.0/24, и подобласть на вебсайте Интранета имеет URL /subarea . тогда формируйте следующую внешнюю сторону ваш действительный хозяин HTTPS (таким образом это обращается и к HTTPS и к HTTP):

httpd.conf

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>