[英]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");
}
Chrome中的有效證書:
為了避免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.