使用Rustls和Hyper-in-Rust实现HTTPS服务器

使用Rustls和Hyper-in-Rust实现HTTPS服务器,rust,hyper,Rust,Hyper,我正在尝试使用带Hyper的Rustls实现HTTPS服务器,但无法获得如何实现相同的示例。为此,我遵循并尝试了hyper-rustls存储库中给出的示例 它总是给出这个错误 FAILED: error accepting connection: TLS Error: Custom { kind: InvalidData, error: AlertReceived(CertificateUnknown) } 我是个新手,因此不知道如何通过Hyper正确实现HTTPS。我还讨论了与此相关的问题

我正在尝试使用带Hyper的Rustls实现HTTPS服务器,但无法获得如何实现相同的示例。为此,我遵循并尝试了hyper-rustls存储库中给出的示例

它总是给出这个错误

FAILED: error accepting connection: TLS Error: Custom { kind: InvalidData, error: AlertReceived(CertificateUnknown) }
我是个新手,因此不知道如何通过Hyper正确实现HTTPS。我还讨论了与此相关的问题


但仍然无法找到解决方案。如果需要更多信息,请务必让我知道。

看起来您的问题不在于Hyper或Rust,而在于TLS。默认情况下,当您通过HTTPS建立连接时,客户端将验证服务器证书的真实性。证书需要由受信任的机构签名:有关详细信息,请参阅,例如

要验证,请使用
curl

$curlhttps://localhost:1337/echo -X-POST-v——不安全
...
*SSL证书验证结果:证书链(19)中的自签名证书,仍在继续。
...
所以这很好用。如果删除
--unsecure
标志,
curl
将拒绝建立连接:

$curlhttps://localhost:1337/echo -X后-v
...
curl:(60)SSL证书问题:证书链中的自签名证书
详情如下:https://curl.haxx.se/docs/sslcerts.html
curl无法验证服务器的合法性,因此无法
建立到它的安全连接。要了解更多有关此情况的信息,请执行以下操作:
如何修复,请访问上述网页。
要解决此问题,您需要:

  • 使用正确签名的证书而不是自签名的证书,或
  • 将客户端配置为不验证证书,或
  • 将客户端配置为信任特定的自签名证书

  • 在生产中,您唯一的选择是(1)。在开发过程中,您可以忽略(2)或(3)。

    实际上,我最初使用的是来自某个SSL提供商的正确签名证书,但它不适用于此代码。然后我发现问题出在
    rsa\u private\u keys()的
    rustls
    函数上,因为它只对rsa私钥有效。相反,我使用了
    pkcs8\u private\u keys()
    from
    rustls
    中的
    pkcs8\u private\u keys(),因为我的密钥是以“----BEGIN private key------”开头的,而不是以“----BEGIN RSA private key------”开头的,令人惊讶的是,这才是我所面临的真正问题。现在它与我真正的SSL证书完美地结合在一起,因此HTTPS可以完美地工作。非常感谢你的帮助。