如何在Vapor Web框架中安装SSL证书?

时间:2016-09-27 09:42:02

标签: ssl openssl vapor

我想安装SSL(Comodo通配符证书,例如:" * .test.com") 在Vapor Web框架中," servers.json"我得到的是:

{
    "default": {
        "port": "$PORT:443",
        "host": "api.test.com",
        "securityLayer": "tls",
        "tls": {
            "certificates": "chain",
            "certificateFile": "/path/ssl-bundle.crt",
            "chainFile": "/path/ssl-bundle.crt",
            "privateKeyFile": "/path/key.pem",
            "signature": "signedFile",
            "caCertificateFile": "/path/AddTrustExternalCARoot.crt"
            }
    }
}

我已经确定"公共/私人"密钥匹配已经使用openssl命令。关于certificateFile部分,例如" ssl-bundle.crt",我也试过" * .test.com.crt"使用" key.pem"同样(仍然使用openssl通过验证,唯一的区别是一个是test.com的证书,另一个是捆绑证书,已经通过正确的订单组合。)。此外,所有证书和密钥的格式也是正确的。我还确保证书/密钥文件位置正确,以便Vapor可以找到这些文件。但我仍然无法正确启动服务器,并始​​终显示错误。 我尝试在xcode中找到确切的位置,但我只能看到它在此方法中失败:" tls_accept_fds()",它位于CLibreSSL库的tls_server.c中。

enter image description here

另外,我看到了xcode向我显示的错误消息:

enter image description here

使用调试模式进行跟踪后,我只能知道程序似乎在" SSL_set_rfd()"中引发了错误。或者" SSL_set_rfd()",但我不确切知道。 xcode只显示给我,我在调试控制台中找不到任何其他错误消息。结果,到目前为止,我只能确保错误应该在这个块中:

int
tls_accept_fds(struct tls *ctx, struct tls **cctx, int fd_read, int fd_write)
{
struct tls *conn_ctx = NULL;

// I pass this block
if ((ctx->flags & TLS_SERVER) == 0) {
    tls_set_errorx(ctx, "not a server context");
    goto err;
}

// I pass this block
if ((conn_ctx = tls_server_conn(ctx)) == NULL) {
    tls_set_errorx(ctx, "connection context failure");
    goto err;
}

// I pass this block
if ((conn_ctx->ssl_conn = SSL_new(ctx->ssl_ctx)) == NULL) {
    tls_set_errorx(ctx, "ssl failure");
    goto err;
}

// I pass this block
if (SSL_set_app_data(conn_ctx->ssl_conn, conn_ctx) != 1) {
    tls_set_errorx(ctx, "ssl application data failure");
    goto err;
}

// The error occurs here, in SSL_set_rfd or SSL_set_wfd, it will then go to err part: "*cctx = NULL;", not even go into the if block.
if (SSL_set_rfd(conn_ctx->ssl_conn, fd_read) != 1 ||
    SSL_set_wfd(conn_ctx->ssl_conn, fd_write) != 1) {
    tls_set_errorx(ctx, "ssl file descriptor failure");
    goto err;
}

*cctx = conn_ctx;

return (0);

err:
tls_free(conn_ctx);

*cctx = NULL;

return (-1);
}

所以,以上是我现在收到的所有信息,而且我已经无法在互联网上找到解决方案好几天了...... 任何人都可以给我任何关于如何在Vapor Web框架中安装SSL的提示吗?我已经可以在Apache,Nginx,Tomcat等中正确安装SSL。但是从未在Vapor中取得成功,看起来像C库问题,但我不知道它失败的真正原因,非常感谢您提供任何可能的帮助。

1 个答案:

答案 0 :(得分:1)

已在此处找到并修复了错误:https://github.com/vapor/tls/pull/27