2016-09-29 2 views
0

Мне нужно перенести с apache2 httpd на (на основе java) сервер vert.x 3. Apache2 HTTPD может быть успешно выполнен с использованием следующих трех сертификатов/ключевые файлы в ssl.conf (укороченные пути):Перенос с apache2 на vertx 3 при использовании ssl

<VirtualHost> 
    ... 

    SSLCertificateFile certificate.cer 
    SSLCertificateKeyFile privatekey.key 
    SSLCertificateChainFile intermediate.cer 

    ... 
</VirtualHost> 

Браузеры принятые соединение по протоколу HTTPS без жалоб.

После создания хранилища ключей для vert.x 3 и запустить его, браузер говорит мне:

www.mydomain.com uses an invalid security certificate. 
The certificate is not trusted because the issuer certificate 
is unknown. The server might not be sending the appropriate 
intermediate certificates. 
An additional root certificate may need to be imported. 
Error code: SEC_ERROR_UNKNOWN_ISSUER 

Тем не менее, браузер, кажется, получить сертификат сервера и правый промежуточный сертификат.

Как я могу узнать, какой корневой сертификат (из северных корневых сертификатов GeoTrust) используется хорошо работающей конфигурацией apache2 httpd? Должен ли я включить это в хранилище java?

Если да, то как httpd находит правильный корневой сертификат - и где?

Является ли папка .../mozilla правильным местом для получения корневых сертификатов для сервера (я думаю, что место только для сертификатов для использования браузером)?

Чтобы исключить альтернативное объяснение: Имеет ли vertx известную ошибку в ее функциональности ssl?

+0

Было бы проще попытаться понять проблему, если бы вы могли представить простой пример кода, как настроить SSL в своем коде. –

+0

Что значит «код»? Когда Vert.x 3 настроен на использование java keystore (.JKS), он принимает хранилище ключей и пароль: новые HttpServerOptions() .setSsl (истинные) .setKeyStoreOptions ( новые JksOptions() .setPath ("keystore.jks") .setPassword ("...") ) ); - или вы имели в виду под «кодом» сценарий bash, который использует openssl и keytool для создания хранилища java? <- это работает (промежуточный, сертификат и ключ - o.k.), за исключением того, что браузер дает код ошибки: SEC_ERROR_UNKNOWN_ISSUER. – Michael

+1

Я хотел знать, используете ли вы хранилища ключей или сертификаты openssl, например, вы можете использовать существующие сертификаты openssl с помощью: 'vertx.createHttpServer (новый HttpServerOptions() .setSsl (true) .setPemKeyCertOptions (новый PemKeyCertOptions() .setKeyPath (" server-key.pem ") .setCertPath (" server-cert.pem ") ));' –

ответ

1

Конфигурация Vert.x SSL может быть выполнена либо с помощью java keystores, либо с использованием OpenSSL. У них обоих есть плюсы и минусы, однако, если вы переходите от Apache к Vert.x, самый короткий путь будет использовать двигатель OpenSSL.

Для того, чтобы использовать OpenSSL двигатель понадобится одна дополнительная зависимость в проекте:

<dependency> 
    <groupId>io.netty</groupId> 
    <artifactId>netty-tcnative-boringssl-static</artifactId> 
    <version>1.1.33.Fork21</version> 
</dependency> 

Это позволит Netty использовать OpenSSL или более точно BoringSSL и, следовательно, использовать существующие сертификаты. Загрузка сертификатов осуществляется путем создания HttpOptions объекта, как это:

new HttpServerOptions() 
    .setSsl(true) 
    .setPemKeyCertOptions(
    new PemKeyCertOptions() 
     .setKeyPath("privatekey.key") 
     .setCertPath("certificate.cer"))); 

Ключевые варианты конфигурации магазина ожидает закрытый ключ и его сертификат на основе повышенной конфиденциальности электронных файлов по электронной почте (ФЭУ).

Ключевой файл должен содержать зашифрованные ноны закрытого ключа в формате PKCS8 завернутого в PEM блоке, например:

-----BEGIN PRIVATE KEY----- 
MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDV6zPk5WqLwS0a 
... 
K5xBhtm1AhdnZjx5KfW3BecE 
-----END PRIVATE KEY----- 

Файл сертификата должен содержать сертификат X.509, завернутый в PEM блоке, для пример:

-----BEGIN CERTIFICATE----- 
MIIDezCCAmOgAwIBAgIEZOI/3TANBgkqhkiG9w0BAQsFADBuMRAwDgYDVQQGEwdV 
... 
+tmLSvYS39O2nqIzzAUfztkYnUlZmB0l/mKkVqbGJA== 
-----END CERTIFICATE----- 

Там нет реальной поддержки сертификатов цепочки, но вы могли бы работать вокруг него (если у вас есть сайт общественного облицовочного) по адресу: https://whatsmychaincert.com/ и загружая правильную цепочку (держать «Включить Root Certificate» непроверенные) , Тогда эта загрузка станет certificate.cer.

+0

В моем случае это не работает. Я получаю сообщение об ошибке: «Отсутствует ----- НАЧАТЬ ЧАСТНЫЙ КЛЮЧ ----- разделитель», Мой ключ начинается с ----- BEGIN RSA PRIVATE KEY -----. Когда я отменяю RSA, он тоже не работает. Однако эти ключи отлично работают в apache2. – Michael

+0

Недостающая часть: $ openssl pkcs8 -topk8 -in privatekey.pem -inform pem -out openssl_key_pk8.pem -outform pem -nocrypt. И тогда openssl_key_pk8.pem может быть частью вышеуказанной процедуры. – Michael

+0

Еще одно замечание: убедитесь, что вы пытаетесь запустить на oracle jdk, поскольку openjdk не поставляется со всеми сильными алгоритмами шифрования. –

 Смежные вопросы

  • Нет связанных вопросов^_^