В Stunnel есть встроенная возможность проверки подлинности сертификатов тех хостов, к которым или с которых идет подключение. Для этого предназначена опция -v. После -v при вызове Stunnel указывается уровень проверки сертификата. Он может иметь следующие значения:
Сертификат создается при сборке пакета и помещается вместе с секретным ключом, используемым при расшифровке входящего трафика, в файл 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