Шифрование

Содержание материала

Звезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активнаЗвезда не активна
 

Описанные в предшествующих разделах механизмы безопасности все до единого предназначены для защиты информации, которую предоставляет сервер. Однако на сервере лежит еще и ответственность за безопасность данных клиента.

Чтобы создать систему электронной коммерции, необходимо использовать защищенный сервер, не позволяющий злоумышленникам получить доступ к личным данным покупателя, в частности к номеру его кредитной карты. Для шифрования сеансов работы, в которых передаются конфиденциальные данные, сервер Apache использует механизм SSL (Secure Sockets Layer, уровень защищенных сокетов).

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

SSL сложнее, поскольку задействует шифрование с открытым ключом. Шифрование - область в принципе сложная, а шифрование с открытым ключом - в особенности. Работа шифрования с открытым ключом и, в частности, протокола SSL описана в главе 12. Если вам необходимы дополнительные сведения, прочтите указанную главу, прежде чем включать поддержку SSL в своем сервере Apache.

Поддержка SSL в Apache реализована модулем mod_ssl. В свою очередь mod_ssl в работе полагается на библиотеки шифрования, инструменты и реализации протоколов SSL из пакета OpenSSL. Пакет OpenSSL включен в состав многих систем Linux и некоторых систем Unix. Прежде чем устанавливать mod_ssl, убедитесь в наличии OpenSSL в системе; если пакет отсутствует, скопируйте исходные тексты с сайта http://www.openssl.org. Выполните программу conf ig, поставляемую в комплекте, а затем make, чтобы скомпилировать OpenSSL. Выполните make test и make install, чтобы установить пакет.

После установки OpenSSL можно устанавливать и модуль mod_ssl. Во многих системах Linux и некоторых системах Unix mod_ssl является частью базовой системы Apache. Если для вашей системы это неверно, скопируйте пакет mod_ssl с сайта http://www.modssl.org. Повторно скомпилируйте Apache с ключом —with-ssl, чтобы включить в Apache поддержку расширений SSL.


Установка mod_ssl добавляет в пример файла настройки Apache (обычно он называется httpd.conf.default) различные строки настройки SSL. Эти новые строки помещаются внутри контейнеров IfDefine, что позволяет включать поддержку SSL из командной строки httpd. Система Red Hat , в которой mod_ssl интегрирован в базовую систему Apache, является хорошим приме ром такого подхода. Вот контейнеры IfDefine для инструкций mod_ssl LoadModule и AddModule (система Red Hat):

<IfDefine HAVE_SSt> 
 LoadModule ssl_module modules/libssl.so 
 </IfDefine> 
 cifDefine HAVE_SSL> 
 AddModule mod_ssl.c 
 </IfDefine> 

Инструкции LoadModule и AddModule выполняются только в случае, когда в командной строке httpd определен символ HAVE_SSL. Строка «НА- VESSL» является произвольным выбором - в другой системе может использоваться просто «SSL». Главное, чтобы эта строка совпадала со значением, определенным в командной строке httpd. К примеру:

« httpd -DHAVE_SSL

Назначение команды - запустить сервер SSL Apache в системе Red Hat 7.2. Помимо контейнеров для инструкций LoadModule и AddModule, существует контейнер IfDefine для специальных настроек сервера SSL. Вот такой контейнер из файла настройки Red Hat:

<IfDefine HAVE_SSL> 
 Listen 80 
 Listen 443 
 </IfDefine>
 
 <IfDefine HAVE_SSL> 
 AddType application/x-x509-ca-cert ,crt 
 AddType application/x-pkcs7-crl .crl 
 </IfDefine>
 <IfOefine HAVE_SSL>
 <VirtualHost .default.:443>
 ErrorLog logs/error_log
 TransferLog logs/access_log
 SSLEngine on
 SSLCertificateFile /etc/httpd/conf/ssl.crt/server.crt
 SSLCertificateKeyFile /etc/httpd/conf/ssl.key/server.key
 <Files " "_(cgi|shtml|phtml|php3?)$">
 SSLOptions +StdEnvVars
 </Files>
 <Directory "/var/www/cgi-bin">
 SSLOptions +StdEnvVars
 </Directory>
 SetEnvIf User-Agent \»MSIE.«" \
 nokeepalive ssl-unclean-shutdown \
 downgrade-1.0 force-response-1.0
 CustomLog logs/ssl_request_log \
 "*t %h %{SSL_PR0T0C0L}x %{SSL_CIPHER}x %r' %b"
 </VirtualHost>
 </IfDefine>

Две строки в первом контейнере IfDefine предписывают серверу принимать соединения через порт 443, а не только через стандартный порт 80. Порт 443 используется в работе протокола SSL. Две строки во втором контейнере IfDefine связывают файловые расширения .crt и .crl с определенными файловыми MIME-типами. Расширения .crt и .crl относятся к сертификатам SSL. К сертификатам мы еще вернемся в этой главе.

Основная часть настроек сервера SSL содержится в контейнере VirtualHost. Данные настройки виртуального узла используются, когда поступает соединение на порт сервера по умолчанию, SSL-порт 443. Специальный файл журнала позволяет отслеживать SSL-запросы. Инструкции ErrorLog, TransferLog и CustomLog мы уже ранее встречали. Большинство прочих инструкций настройки действует только при работающей подсистеме SSL:

SSLEngine - Включает обработку SSL для данного виртуального узла.

SetEnvIf - Выполняет, по существу, ту же функцию, что и инструкции BrowserMatch, описанные ранее. В данном примере инструкция SetEnvIf проверяет, является ли User-Agent (броузер) агентом Microsoft Internet Explorer. В случае положительного ответа параметр ssl-unclean-shutdown уведомляет Apache, что данный броузер не умеет корректно закрывать соединения и что не следует использовать постоянные (keepalive) соединения при работе с броузером Internet Explorer.

SSLOptions - Определяет значения специальных параметров протокола SSL. В данном примере разрешены StdEnvVars для каталога /var/www/cgi-bin, равно как и для всех файлов CGI и SSI. StdEnvVars - это переменные среды, передаваемые по соединению клиенту. Извлечение значений этих переменных требует от сервера затрат времени, поэтому они передаются только в случаях, когда клиент способен воспользоваться значениями - как в случаях сценариев CGI или файлов SSI.

SSLCertificateFile

Указывает на файл, содержащий открытый ключ сервера.

SSLCertificateKeyFile

Указывает на файл, содержащий закрытый ключ сервера. Шифрование с открытым ключом требует существования двух ключей шифрования: открытого - и доступного всем клиентам, а также закрытого, который держится в секрете. Открытый ключ хранится в специальном формате, известном в качестве сертификата. Прежде чем запускать SSL на сервере, необходимо создать оба ключа.

OpenSSL предоставляет инструменты для создания открытых и закрытых ключей SSL. Простейшим из этих инструментов является файл сборки Ма kefile из каталога ssl/certs1, позволяющий создавать сертификаты и ключи по команде make. Для создания сертификатов или ключей SSL в make может использоваться два типа аргументов. В первом типе для определения вида сертификата или ключа используется расширение файла:

make name, key - Создает закрытый ключ и записывает его в файл пате. key.

make пате.crt - Создает сертификат с открытым ключом и сохраняет его в файле пате. crt.

make name.pem - Создает сертификат и ключ в формате РЕМ (Privacy Enhanced Mail) и сохраняет результат в файле пате. рет . В главе 12 эта команда make используется в целях создания ключей для программы stunnel.

make пате.csr - Создает запрос на подпись сертификата. Сертификат может получить цифровую подпись от доверенной инстанции, известной как сертифицирующий орган (certificate authority, СА) , котора я ручаетс я за подлинность открытого ключа, хранимого в сертификате. Подробнее - через несколько абзацев.

Вторым типом аргументов для файла сборки являются ключевые слова. Ключевые слова позволяют создавать сертификаты и ключи, предназначенные для использования только в Apache:

make genkey - Создает закрытый ключ для сервера Apache. Ключ сохраняется в файле, на который указывает переменная KEY из файла Makefile.

make certreq - Создает запрос на подпись сертификата для сервера Apache. Запрос на подпись сохраняется в файле, на который указывает переменная CSR из файла Makefile.


make testcert - Создает сертификат для сервера Apache. Данный сертификат может использоваться для загрузки и проверки сервера SSL. Однако этот сертификат не подписан действующим С А и, следовательно, не приемлем для использования в сети Интернет. Сертификат сохраняется в файле, на который указывает переменная CRT из файла Makefile.

В каталоге /etc/httpd,/conf системы Red Hat существует ссылка на файл сборки Makefile, облегчающая создание ключей в том месте файловой системы, где httpd.conf ожидает их найти. Если взглянуть в каталог /etc/httpd/ conf системы Red Hat, мы обнаружим, что ключи, обозначенные инструкциями SSLCertificateFile и SSLCertificateKeyFile, уже существуют, хотя мы их не создавали.

Для создания сертификатов и ключей Makefile использует команду openssl. Синтаксис команды openssl сложен и обширен, так что использование файла сборки приносит реальную пользу. Однако по-прежнему остается возможность напрямую пользоваться командой openssl, чтобы решать задачи, для которых не приспособлен файл Makefile. Например, чтобы просмотреть содержимое сертификата, который Red Hat поместил в каталог /etc/httpd/conf, выполните следующую команду:

  • openssl x509 -noout -text -In ssl.crt/server.crt
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 0 (0x0)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=--, ST=SomeState, L=SomeCity, 0=Some0rganization,
OU=SomeOrganizationalUnit,
CN=localhost.localdomain/Email=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.n
Validity
Not Before: Jul 27 12:58:42 2001 GMT
Not After : Jul 27 12:58:42 2002 GMT
Subject: C=--, ST=SomeState, L=SomeCity, 0=Some0rganization,
0U=Some0rganizationalUnit,
CN=localhost.localdomain/Email=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:a3:e7:ef:ba:71:2a:52:ff:d9:df:da:94:75:59:
07:f9.49:4b:1c:dO:67:b2:da:bd:7b:Ob:64:63:93:
50:3d:al:02:e3:05:3b:8e:e6:25:06:a3:d2:Of:75:
Oa:85:71:66:d0:ce:f9:8b:bO:73:2f:fe:90:75:ad:
d6:28:77:bO:27:54:81:ce:3b:88:38:88:e7:eb:d6:
e9:aO:dd:26:79:aa:43:31:29:08:fe:f8:fa:90:d9:
90: ed: 80:96:91:53: 9d: 88: a4:24: Oa: dO: 21: 7d: 5d:
53:9f:77:a1:2b:4 f:62:26:13:57:7f:de:9b:40:33:
c3:9c:33:d4:25:1d:a3:e2:47
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Subject Key Identifier:
55:E9:ED:C1:BF:1A:04:F8:C2:78:6E:7A:2C:D4:9C:AC:7B:CD:D2
X509v3 Authority Key Identifier:
keyid:55:E9:ED:C1:BF:1A:04:6E:7A:2C:04:DD:9C:AC:7B:CD:D2
DirName:/C=-/ST=SomeState/L=SomeCity/0=Some0rganization/
OU=SomeOrganizationalUnit/CN=localhost.localdomain/
Email=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.n
serial:00
X509v3 Basic Constraints:
CA:TRUE
Signature Algorithm: md5WithRSAEncryption
76:78:77:f0:a2:19:3b:39:5f:2a:bd:dO:42:da:85:6e:c2:Oc:
5e:80:40:9c:a8:65:da:bf:38:2b:f0:d6:aa:30:72:fb:d3:Id:
ce:cd:19:22:fb:b3:cc:07:ce:cc:9b:b6:38:02:7a:21:72:7c:
26:07:cc:c9:eO:36:4f:2f:23:c9:08:f7:d4:c1:57:2f:3e:5c:
d5:74:70:c6:02:df:1a:62:72:97:74:0a:a6:db:e0:9d:c9:3d:
8e:6b:18:b1:88:93:68:48:c3:a3:27:99:67:6f:f7:89:09:52:
3a:a3:fb:20:52:bO:03:06:22:dd:2f:d2:46:4e:42:f2:1c:f0:
f1:1a

Как видите, сертификат содержит большой объем информации. Однако лишь некоторые его фрагменты необходимы, чтобы определить, является ли он действительным для нашего сервера:

Issuer

Issuer - это отмеченное имя организации-издателя, которая выдала и подписала данный сертификат. Отмеченное имя записывается в формате, спроектированном таким образом, что позволяет обозначать организации уникальными именами. Очевидно, название организации в данном сертификате - вымышленное, и является всего лишь примером.

Subject

Subject - отмеченное имя организации, получившей сертификат. В нашем случае поле Subject должно содержать название нашей организации. Содержимое поля Subject в данном случае - тоже всего лишь пример.

Validity

Поле Validity содержит сведения о сроках действия сертификата. В данном случае сертификат действителен в течение года. Указанные даты позволяют использовать сертификат для тестирования работы SSL.

Чтобы убедиться, что сервер SSL действительно работает, воспользуйтесь броузером для подключения к локальному серверу. При этом начните URL с указания протокола https:// , а не http:// . https позволяет подключиться через порт 443, то есть через порт SSL. Броузер отвечает предупреждением, что сервером используется недействительный сертификат (рис. 11.4). Кнопка View Certificate позволяет просмотреть часть той информации о сер- тификате, с которой мы только что познакомились. Пользователь может разрешить использование сертификата в данном сеансе и начать работу с «защищенным документом». В данном случае защищенный документ пред- ставлен просто тестовой страницей, поскольку мы еще не создали в своей системе ни одного настоящего защищенного документа. Сервер запущен и функционирует, но внешние клиенты не смогут работать с ним, пока мы не получим действительный подписанный сертификат. Для создания запроса на подпись сертификата вашего сервера воспользуйтесь командой make certreq. Пример:


# cd /etc/httpd/conf 
# mak e certreq 
umask 77 ; \ 
/usr/bin/openssl req -new -key /etc/httpd/conf/ssl.key/server.key -out /etc/http 
d/conf/ssl.csr/server.csr 
Using configuration from /usr/share/ssl/openssl.cnf 
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) [AU]:US
State or Province Name (full name) [Some-State] Maryland
Locality Name (eg, city) []:Gaithersburg
Organization Name (eg, company) [Internet Widgits Ltd]:WroteThebook.com
Organizational Unit Name (eg, section) []:Headquarters
Common Name (eg, your name or hostname)[]:crab.wrotethebook.com
Email Address []:alanaewrotethebook.com
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

Только что созданный запрос можно просмотреть при помощи команды openssl. Обратите внимание, что в данном запросе содержится уже действительное отмеченное имя нашего сервера в поле Subject. Однако отсутствует информация в поле Issuer. Чтобы сертификат стал действительным, он должен быть подписан признанным сертифицирующим органом.


  • openssl req -noout -text -In server.csr
Using configuration from /usr/share/ssl/openssl.cnf
Certificate Request:
Data:
Version: 0 (0x0)
Subject: C=US, ST=Maryland, L=Gaithersburg, 0=WroteThebook.com,
0U=Headquarters,
CN=crab.wrotethebook.com/Email=Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:a3:e7 :ef: ba :71:2a: 52: ff:d9:df:da: 94:75:59:
07:f9:49:4b:1c:dO:67:b2:da:bd:7b:Ob:64:63:93:
50:3d:a1:02:e3:05:3b:8e:e6:25:06:a3:d2:Of:75:
Oa:85:71:66:dO:ce:f9:8b:bO:73:2f:fe:90:75:ad:
d6:28:77:bO:27:54:81:ce:3b:88:38:88:e7:eb:d6:
e9:aO:dd:26:79:aa:43:31:29:08:fe:f8:fa:90:d9:
90:ed:80:96:91:53:9d:88:a4:24:Oa:dO:21:7d:5d:
53:9f:77:a1:2b:4f:62:26:13:57:7f:de:9b:40:33:
c3:9c:33:d4:25:1d:a3:e2:47
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: md5WithRSAEncryption
3f:c2:34:c1:1f:21:d7:93:5b:cO:90:c5:c9:5d:10:cd:68:1c:
7d:90:7c:6a:6a:99:2f:f8:51:51:69:9b:a4:6c:80:b9:02:91:
f7:bd:29:5e:a6:4d:a 7:fc:c2:e2:39:45: 1d:6a:36:1f:91:93
77:5b:51:ad:59:e1:75:63:4e:84:7b:be:1d:ae:cb:52:1a:7c
90:e3:76:76:1e:52:fa:b9:86:ab:59:b7:17:08:68:26:e6:d4
ef:e6:17:30:56:1c:95:c9:fc:bf:21:ec:63:81:be:47:09:c7
67:fc:73:66:98:26:5e:53:ed:41:c5:97:a5:55:1d:95:8f:Ob
22:0b

Сертифицирующие органы работают на коммерческой основе и имеют своей целью получение прибылей. Чтобы ваш сертификат был подписан, необходимо заполнять формы, платить взносы, а также создать CSR-запрос. Ваш веб-броузер хранит список признанных сертифицирующих органов. В броузере Netscape 6.1 можно просмотреть этот список в разделе Certificate Manager меню Preferences (рис. 11.5). Каждый сертифицирующий орган поддерживает веб-сайт, на котором доступны сведения об оплате и процессе регистрации.

Рис. 11.5. Список признанных сертифицирующих органов в Netscape 6.1

Хотя сертификаты, подписанные признанным СА, используются наиболее широко, возможно создание сертификатов с подписью автора. Впрочем, подобные сертификаты имеют ограниченную ценность. Как мы видели из рис. 11.4, сертификат, который не подписан признанным СА, требует подтверждения от клиента. Таким образом, подписанные автором сертификаты могут использоваться только в случае небольшого числа клиентов. Чтобы подписать сертификат самостоятельно, воспользуйтесь командой openssl следующим образом:

# openssl req -х509 -key ssl.key/server.key \ 
> -in ssl.csr/server.csr -out ssl.crt/server.crt

При просмотре созданного файла server.crt по команде openssl можно видеть, что поля Issuer и Subject содержат одно и то же отсеченное имя. И на этот раз оно является действительным именем нашего сервера.


Обмениваться, хранить, передавать Ваши файлы стало просто как никогда.
yandex-disk
Читать подробнее: для чего Yandex-Диск проекту Mini-Server. Практика установки, настройки и использования сетевого хранилища на Ubuntu server LTS 12.04 в статье Резервное копирование сервера Ubuntu на Яндекс Диск.

>> Ubuntu 12.04 + Nginx Скачать сервер
>> Fedora 15 Скачать сервер
>> Простой Debian 6.0.6 Скачать сервер
>> CentOS 6.0 и
+ (5.6) другой
Скачать сервер
>> OpenSUSE 11.4
MAX
Скачать сервер

Вход на сайт

ВНИМАНИЕ!

Регистрация на сайте только по согласованию с администратором ресурса. Обращаться через форму обратной связи.