Kotlin 让';s使用vert.x加密

Kotlin 让';s使用vert.x加密,kotlin,vert.x,Kotlin,Vert.x,我从Let's Encrypt获得了有效的https证书,但将其授予vert.x版本3.6.2时存在信任问题 我用apache测试了cert,没问题,但是如果我尝试用wget访问https vert.x服务器实例,我得到: $wget --2019-01-22 10:30:56-- 正在解析www.myhost.mydomain(www.myhost.mydomain)。。。88.14.34.156 连接到www.myhost.mydomain>(www.myhost.mydomain)| 88

我从Let's Encrypt获得了有效的https证书,但将其授予vert.x版本3.6.2时存在信任问题

我用apache测试了cert,没问题,但是如果我尝试用wget访问https vert.x服务器实例,我得到:

$wget
--2019-01-22 10:30:56--
正在解析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
垂直代码:

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日志设置为debug,但没有出现错误消息


我缺少什么?

问题在证书链文件chain.pem中。它似乎不包含完整的证书链。如果您查看该文件,它可能只包含一个中间LE授权证书,即让我们加密授权X3。它与Apache一起工作,因为SSLCertificateChainFile实际上是一个文件,并且根本没有被使用

另一侧的Vert.x确实使用chain.pem文件。它只返回中间证书,wget因此而抱怨。要解决此问题,请创建一个由chain.pemcert.pem文件组成的fullchain.pem文件,例如

cat cert.pem chain.pem > fullchain.pem
然后将fullchain.pem与PemTrustOptions配置一起使用

您不需要将LE根证书放在fullchain.pem文件中,因为它应该已经存在于客户端和服务器端。这是一篇关于它的文章摘录

证书列表 这是一个证书序列(链)。寄件人的 证书必须排在列表的第一位。每个跟随者 证书必须直接证明其前面的证书。因为 证书验证要求分发根密钥 独立地,指定根目录的自签名证书 根据 假设远程端必须已经拥有它,以便 在任何情况下都要验证它


我在这里找到了解决方案:

我在setPemKeyCertOptions设置中将cert.pem更改为fullchain.pem,它可以正常工作


感谢您的努力。

我试图在PemTrustOptions配置中将chain.pem更改为fullchain.pem,甚至在没有PemTrustOptions的情况下也尝试过,但得到了相同的结果。我现在再次测试,没有变化…:SI还使用fullchain.pem检查了https,并显示:链问题Incomplete@Ebadta您的fullchain.pem包含哪些内容?它应该包含两个PEM编码数据块。每个区块由------开始证书------和------结束证书------包围。你能证实这一点吗?