Выполнение тестов в акведуке с использованием SSL с использованием самозаверяющего сертификата приводит к ошибке

Я новичок в работе с openSSL и Cert делать и не делать.

В моем файле приемника я использую SecurityContext для форсирования HTTP:

@override
SecurityContext get securityContext {
    return new SecurityContext()
        ..usePrivateKey("SSL/key.pem", password: keypassword)
        ..useCertificateChain("SSL/cert.pem", password: certpassword);
}

Я занимаюсь локальной разработкой и создал самозаверяющий ключ и сертификат, используя OpenSSL. Когда я запускаю приложение через акведук, у меня нет проблем (кроме подтверждения в соответствующем браузере, что я знаю, что сертификат не подписан CA), но при выполнении моих тестов я получаю следующую ошибку:

HandshakeException: Handshake error in client (OS Error: 
CERTIFICATE_VERIFY_FAILED: self signed certificate(ssl_cert.c:345))

Означает ли это, что мне нужно использовать сертификат, подписанный CA, чтобы избежать этого?

1 ответ

Решение

По умолчанию Dart HttpClient не будет работать, если SSL-сертификат сервера является самоподписанным. Вы можете переопределить это, но TestClient не предоставляет вам доступ к базовому HttpClient. Мы могли бы сделать эту собственность публичной, но...

Тесты в основном для тестирования логики приложения. Используется ли SSL или нет, это не имеет большого значения. aqueduct serve имеет параметры CLI для SSL. При работе локально или с помощью тестов вы можете опустить SSL. При удаленном запуске с подписанным сертификатом SSL вы можете добавить ключ и путь к файлу к аргументам CLI при запуске:

aqueduct serve --ssl-key-path SSL/key.pem --ssl-certificate-path SSL/cert.pem

Другие вопросы по тегам