使用自签名证书在使用SSL的渡槽中运行测试会导致错误

时间:2017-07-31 16:55:50

标签: dart aqueduct

我不熟悉使用openSSL和cert,并且没有。

在我的接收器文件中,我正在使用SecurityContext来强制HTTP:

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

我在本地开发并使用OpenSSL创建自签名密钥和证书。当通过aqueduct服务运行应用程序时,我没有任何问题(除了通过相应的浏览器确认我知道证书没有CA签名),但在运行我的测试时,我收到以下错误:

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

这是否意味着我需要使用CA签名证书来避免这种情况?

1 个答案:

答案 0 :(得分:1)

默认情况下,如果服务器的SSL证书是自签名的,Dart HttpClient将失败。您可以覆盖它,但TestClient不会授予您访问底层HttpClient的权限。我们可以将该财产公之于众,但是......

测试主要用于测试应用程序逻辑。是否使用SSL并不重要。 aqueduct serve具有SSL的CLI选项。在本地或通过测试运行时,您可以省略SSL。使用签名的SSL证书远程运行时,可以在启动时将密钥和文件路径添加到CLI args:

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