簡體   English   中英

使用rustls訪問時,使用Let's Encrypt證書的鎳服務器發生握手錯誤

[英]Nickel server using Let's Encrypt certificate has a handshake error when accessed with rustls

我正在嘗試創建一個小型的類似REST的API,應該使用HTTPS對其進行保護。 我想將鎳板條箱用於服務器,將hyper_rustls和hyper用於客戶機。

只要使用瀏覽器,curl或REST客戶端來訪問服務器,服務器就可以很好地運行,但是當我開始使用hyper_rustls時,總是會收到握手錯誤:

TLS error: AlertReceived(HandshakeFailure)
Connection closed

為了定位錯誤,我設置了一個最小的服務器:

#[macro_use]
extern crate nickel;
extern crate hyper;
use hyper::net::Openssl;


use nickel::Nickel;

fn main() {
    let mut server = Nickel::new();

    server.utilize(router! {
        get "**" => |_req, _res| {
            "Hello world!"
        }
    });

    // FIXME: Add Match Error and OK instead of unwreap and add a propper error handling
    let ssl = Openssl::with_cert_and_key("/etc/letsencrypt/live/www.example.de/fullchain.\
                                          pem",
                                         "/etc/letsencrypt/live/www.example.de/privkey.pem")
        .unwrap();

    server.listen_https("0.0.0.0:6767", ssl).expect("Failed to launch server");
}

在Rust游樂場

為了避免hyper_rustls中的錯誤,我使用了rustls tlsclient示例,但該錯誤仍然出現。

“讓我們加密”證書不是問題,因為我可以使用tlsclient使用這些證書連接到Apache2服務器。

我在想這是怎么回事時犯了一個錯誤?

好像hyper的Openssl::with_cert_and_key告訴openssl使用DEFAULT密碼套件列表,這真是太糟糕了。 在這種情況下,由於chrome表示“過時密鑰交換(RSA)”的相同原因,因此rusts無法握手。 如果運行服務器並將ssllabs.com指向該服務器,則應獲取更多信息。

我認為最近的超級發行版已刪除了此代碼,以便從其他板條箱獲得TLS支持。 你能嘗試一下嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM