0

我是使用 openSSL 和证书做和不做的新手。

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

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

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

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

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

4

1 回答 1

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

于 2017-07-31T21:00:54.890 回答