Давайте зашифруем с помощью vert.x - PullRequest
0 голосов
/ 22 января 2019

Я получил действительный сертификат https от Let's Encrypt, но у меня возникают проблемы с доверием при передаче vert.x версии 3.6.2

Я проверил сертификат с помощью apache, все в порядке, однако, если я пытаюсь связаться с httpsЭкземпляр сервера vert.x с помощью wget:

$ wget https://www.myhost.mydomain/json/read/all-languages--2019-01-22 10: 30: 56-- https://www.myhost.mydomain/json/read/all-languages
Разрешение www.myhost.mydomain (www.myhost.mydomain) ... 88.14.34.156Подключение к www.myhost.mydomain> (www.myhost.mydomain) | 88.14.34.156 |: 443 ... подключено.ОШИБКА: невозможно проверить сертификат www.myhost.mydomain, выданный> 'CN = Let's Encrypt Authority X3, O = Let's Encrypt, C = US': невозможно локально проверить полномочия эмитента.Для небезопасного подключения к www.myhost.mydomain используйте `--no-check-> certificate '.

Имя хоста и ip подделаны.

мой рабочий фрагмент конфигурации apache:

SSLCertificateFile /etc/certs/myhost.mydomain/cert.pem
SSLCertificateKeyFile /etc/certs/myhost.mydomain/privkey.pem
SSLCertificateChainFile /etc/certs/myhost.mydomain/chain.pem

код vert.x:

val httpsOptions = HttpServerOptions()
.setPort(443)
.setSsl(true)
.setPemTrustOptions(PemTrustOptions()
    .addCertPath("/etc/certs/myhost.mydomain/chain.pem"))
.setPemKeyCertOptions(PemKeyCertOptions()
    .addKeyPath("/etc/certs/myhost.mydomain/privkey.pem")
    .addCertPath("/etc/certs/myhost.mydomain/cert.pem")
)
vertx.createHttpServer(httpsOptions).requestHandler(router).listen()

Я настроил ведение журнала vert.x на отладку, но сообщение об ошибке не появляется.

Чего мне не хватает?

Ответы [ 2 ]

0 голосов
/ 23 января 2019

Я нашел решение здесь: https://community.letsencrypt.org/t/android-doesnt-trust-the-certificate/16498/2

Я изменил cert.pem на fullchain.pem в настройках setPemKeyCertOptions, и он работает.

Спасибо за ваши усилия.

0 голосов
/ 23 января 2019

Проблема в файле цепочки сертификатов chain.pem . Кажется, что он не содержит полную цепочку сертификатов. Если вы просматриваете файл, он, вероятно, содержит только один промежуточный сертификат полномочий LE, то есть Let's Encrypt Authority X3 . Он работает с Apache, потому что SSLCertificateChainFile фактически устарел и не используется вообще.

Vert.x с другой стороны использует файл chain.pem . Он возвращает только промежуточный сертификат и wget жалуется на это. Чтобы устранить эту проблему, создайте файл fullchain.pem , состоящий из файлов chain.pem и cert.pem , например,

cat cert.pem chain.pem > fullchain.pem

Затем используйте fullchain.pem с конфигурацией PemTrustOptions .

Вам не нужно помещать корневой сертификат LE в файл fullchain.pem , поскольку он уже должен присутствовать как на стороне клиента, так и на стороне сервера. Вот выдержка из протокола TLS RFC об этом.

certificate_list Это последовательность (цепочка) сертификатов. Отправителя Сертификат ДОЛЖЕН быть первым в списке. Каждый следующий Сертификат ДОЛЖЕН непосредственно удостоверять тот, который ему предшествует. Так как проверка сертификата требует распространения корневых ключей независимо, самоподписанный сертификат, который определяет корень центр сертификации МОЖЕТ быть исключен из цепочки под Предположение, что удаленный конец уже должен обладать им, чтобы подтвердите это в любом случае.

...