2: создание и подпись закрытого ecc-ключа
Создайте каталог для хранения закрытого ключа, запроса на подпись сертификата, а также сертификата сервера. Для этого рекомендуется создать /etc/nginx/ssl. Затем перейдите в каталог:
mkdir /etc/nginx/sslcd /etc/nginx/ssl
Создайте закрытый ECC-ключ при помощи инструмент OpenSSL’s ecparam. Данная команда создает 256-битовый ключ при помощи ECC-кривой prime256v1, а затем сохраняет ключ в файл privatekey.key. Такой 256-битовый ключ равен 2048-битовому закрытому ключу RSA.
openssl ecparam -out privatekey.key -name prime256v1 -genkey
Используйте OpenSSL, чтобы сгенерировать запрос на подпись сертификата.
openssl req -new -key privatekey.key -out csr.pem
После выполнения этой команды будет необходимо ответить на несколько вопросов. В строке Common Name не забудьте указать IP-адрес сервера или имя хоста. Поле challenge password оставьте пустым. Все остальные поля можно заполнить по собственному усмотрению.
4: тестирование ecc-сертификата для nginx
Для тестирования в данном руководстве используется Firefox, хотя любой другой современный веб-браузер будет работать должным образом.
Используйте Firefox, чтобы перейти к IP-адресу или имени хоста облачного сервера. После предупреждения о самоподписанном сертификате появится страница “Welcome to Nginx!”. Предупреждение о сертификате появится потому, что сертификат сервера является самозаверяющим и не был подписан центром сертификации, признанным в веб-браузере.
Настройка jre
Казалось бы, все настроено, и должно работать. Но нет. Остается еще один важный штрих.
Чтобы из приложения на JBoss аутентифицироваться в КриптоПро УЦ по протоколу Gost TLS, сервер JBoss нужно запускать в JRE с установленным КриптоПро JCP провайдером.
При установке JCP в настройки JRE вносятся изменения. В частности, в jre1.8.0_144libsecurity java.security алгоритмы KeyManagerFactory и TrustManagerFactory меняются на Gost. Если так оставить, то в JBoss при старте будет возникать ошибка:
Настройка приложения
Для того чтобы при установке deployment-приложение интегрировалось с настройками на сервере, необходимо внести ряд параметров в его конфигурационные файлы.
Домен безопасности и виртуальный хост приложения указываются в /WEB-INF/jboss-web.xml
Настройка сервера jboss
Для настройки сервера JBoss EAP 7.0.0 все изменения нужно внести в конфигурационный файл jboss-EAP-7.0.0standaloneconfiguration
standalone.xml
В раздел <system-properties> добавляются настройки, указывающие серверу, каких провайдера и хранилища использовать для двусторонней ГОСТ-аутентификации:
Для настройки RSA TLSv1.2 аутентификации пользователя и сервера JBoss в раздел
нужно добавить область безопасности:
Таким образом, для JBoss указаны все необходимые хранилища ключей и сертификатов.
В раздел
Подготовка gost-ключей аутентификации
Процесс обоюдной аутентификации сервера JBoss и КриптоПро УЦ сервера в сущности такой же. Единственное отличие в криптографических алгоритмах.
Серверы обмениваются сертификатами с алгоритмами подписи ГОСТ Р 34.11/34.10-2001 и хэширования подписи ГОСТ Р 34.11-94 вместо применяемых в RSA TLSv1.2 sha256RSA и sha256 соответственно. В качестве корневого сертификата здесь выступает ROOT-сертификат самого ПАК КриптоПро УЦ.
Подготовка rsa-ключей аутентификации
Для аутентификации клиента и подтверждения клиенту подлинности самого сервера обеим сторонам необходимо иметь свои пары ключей с сертификатами открытого ключа. А также хранилище корневых доверенных сертификатов, куда должны быть установлены корневые сертификаты удостоверяющих центров, выпустивших конечные сертификаты аутентификации.
Удостоверяющие центры для сервера и клиента могут быть разные.
Пользователь должен доверять удостоверяющему центру, выпустившему сертификат для сервера.
Сервер должен доверять удостоверяющему центру, выпустившему сертификат для клиента.
Существует много утилит и инструментов с хорошим описанием и примерами, которые позволяют работать с хранилищами и выполнять генерацию ключей и запросов на сертификат (keytool, openSSL, Portecle, XCA). Поэтому процесс подготовки хранилищ и выпуск сертификатов здесь пропустим.
Вот, например, хорошая статья и пошаговая инструкция по настройке Two-way SSL with TLS1.2 для Oracle SOA Suite с использованием openSSL и keytool. Но, правда, она частично потеряла актуальность и перестала отражать всю картину. Выпущенные по ней сертификаты не будут корректно восприниматься в веб-браузерах.
Error: «Subject Alternative Name Missing» or NET::ERR_CERT_COMMON_NAME_INVALID or «Your connection is not private»
если получит с сервера SSL-сертификат без домена в альтернативном имени субъекта сертификации.
Вот что говорит об этом Support Google Chrome Answer
Как с помощью openSSL добавить в сертификат subjectAlternativeName — можно посмотреть здесь и здесь
Разумеется, такой способ получения TLS-сертификатов годится только для внутрикорпоративных приложений.
Постановка задачи
Для корпоративного приложения с тонким клиентом в веб-браузере, middle или backend servlet-а, которые запускаются на JBoss EAP, необходимо настроить двустороннюю аутентификацию по протоколу TLSv1.2 с применением зарубежных криптографических алгоритмов.
Задача усложняется тем, что приложение на сервере JBoss в свою очередь взаимодействует, например, с Программно-аппаратным комплексом «ПАК Удостоверяющий центр КриптоПро», где требуется процедура двусторонней аутентификации по протоколу Transport Layer Security (TLSv1.0) c использованием российских криптографических алгоритмов.
Получается, что в одном приложении на сервере JBoss нужно подружить отечественную и зарубежную криптографию.
Аутентификация должна выполняться комбинированным методом инструментами Инфраструктуры открытых ключей (PKI), т.е. с помощью сертификатов клиента и сервера.
Результаты
Приложение и среда исполнения с двусторонней аутентификацией настроены, каналы передачи данных зашифрованы, между участниками системы установлены надежные соединения.
Требования
- Сервер Debian 7.0 Wheezy;
- Установленный и обновленный OpenSSL.
- Запустите:
apt-get update && apt-get upgrade
Выполнив установку и настройку необходимого ПО, рекомендуется перезапустить сервер.
- Современный браузер (Internet Explorer 7 , Firefox 19 или Chrome 25 ). В данном руководстве используется Firefox.
Кроме того, все команды в данном руководстве необходимо выполнять через root-пользователя.