Сертификаты
В Stunnel есть встроенная возможность проверки подлинности сертификатов тех
хостов, к которым или с которых идет подключение. Для этого предназначена опция -v. После
-v при вызове Stunnel указывается уровень проверки сертификата. Он может иметь следующие
значения:
- 0
Никакой проверки наличия и подлинности сертификата не производится (значение по умолчанию).
- 1
Сертификат проверяется на подлинность, если присутствует. Если сертификат не является
подлинным - соединение не устанавливается.
- 2
Проверяется присутствие сертификата и его подлинность. Если сертификат отсутствует или не является
подлинным - соединение не устанавливается.
- 3
Проверяется присутствие сертификата и его наличие в списке проверенных сертификатов.
Если сертификат отсутствует или его нет в списке проверенных сертификатов - соединение не устанавливается.
Сертификат создается при сборке пакета и помещается вместе с секретным ключом, используемым при расшифровке
входящего трафика, в файл stunnel.pem. Подлинность сертификата означает его подтверждения какой-нибудь официальной службой
проверки сертификатов. Для того, чтоб твой сертификат был подтвержден (подписан), необходимо отправить заявку, заплатить и
получить официальный подлинный сертификат.
В этом нет необходимости, если ты собираешься пользоваться Stunnel для своих целей.
Для этого достаточно использовать неподтвержденный сертификат, не проверяя его на подлинность. Т.е. исключить
использование -v 1 и -v 2. Однако остается возможность использовать -v 3.
Файл stunnel.pem после установки помещается в указанный тобой при сборке в опции
--with-pem-dir каталог. В моем примере это /etc/ssl/certs. Содержимое его примерно такое:
-----BEGIN RSA PRIVATE KEY-----
#данные
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
#данные
-----END CERTIFICATE-----
Строки, начиная с "-----BEGIN CERTIFICATE-----" и заканчивая "-----END CERTIFICATE-----",
и являются сертификатом. Его необходимо скопировать в отдельный файл и добавить в список проверенных сертификатов на хосте, с которым
будет производится соединение. Список проверенных сертификатов может хранится в двух видах - каталог с файлами сертификатов или файл,
содержащие данные сертификатов, примерно такого формата:
-----BEGIN CERTIFICATE-----
#данные 1-го сертификата
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#данные 2-го сертификата
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
#данные 3-го сертификата
-----END CERTIFICATE-----
.....
-----BEGIN CERTIFICATE-----
#данные N-го сертификата
-----END CERTIFICATE-----
В первом случае, файл с сертификатом удаленного хоста копируется в каталог, указанный в опции
--with-cert-dir при сборке (в моем примере /etc/ssl/certs/trusted). Затем выполняется
команда c_rehash, входящая в поставку OpenSSL.
c_rehash /etc/ssl/certs/trusted
Она создает ссылку на скопированный файл, имеющую имя, состоящее из набора букв и цифр, и расширение
.0 ("ноль", а не заглавное "о"). Этот так называемый hash-файл используется OpenSSL для создание индекса
сертификатов. Поподробнее можно почитать, набрав man x509. Если в твоей системе нет команды c_rehash,
то можно выполнить команду:
mv файл_сертификата.pem `openssl x509 -hash -noout -in файл_сертификата.pem`.0
Естественно, вместо файл_сертификата.pem должно быть указано имя твоего файла.:)
Можно использовать каталог, отличный от указанного по умолчанию. Это удобно в случае, когда к
каждому порту доступ должен быть с разного списка хостов. Указывается каталог при помощи опции -a.
Например, для проверки сертификатов, содержащихся в каталоге /etc/ssl/certs/trusted2 необходимо запустить следующую
команду:
stunnel [различные_опции] -a /etc/ssl/certs/trusted2 -v 3
Использование файла с проверенными сертификатами проще, чем использование каталога. Достаточно создать
файл, записать в него содержимое нескольких сертификатов и указать его при запуске при помощи опции -A. Например, для
указания файла /etc/certs/trusted_certs.pem в качестве файла проверенных сертификатов необходимо запустить
stunnel таким образом:
stunnel [различные_параметры] -A /etc/certs/trusted_certs.pem -v 3
Проверка сертификатов может производится как на стороне сервера (проверять подключенных клиентов), так и на стороне
клиента (чтоб быть уверенным, что подключаешься к нужному хосту). Если Stunnel на стороне сервера настроен на проверку
сертификата, то Stunnel на стороне клиента должен запускаться с опцией -p, после которой указан путь
к файлу stunnel.pem. При запуске на стороне сервера использование -p не обязательно. Например:
stunnel -c -p /etc/ssl/certs/stunnel.pem -d 1123 -r some_host:992
При помощи -p также возможно указать путь к файлу, содержащему секретный ключ и
сертификат, отличные от выбираемых по умолчанию.
(c)Ерижоков А.А., 2001.
Использование данного документа разрешено только с согласия автора и с указанием первоисточника:
DH's Linux Site