当我在终端中运行以下命令时
openssl s_client -connect gmail-smtp-in.l.google.com:25 -starttls smtp
我收到一个 CONNECTED(00000005)
响应。
我正在尝试使用 rust-openssl
实现与 Rust 的相同连接(尽管我对其他库开放),这就是我所拥有的:
extern crate openssl;
use openssl::ssl::{SslConnector, SslMethod};
use std::net::TcpStream;
fn main() {
let connector = SslConnector::builder(SslMethod::tls()).unwrap().build();
let stream = TcpStream::connect("gmail-smtp-in.l.google.com:25").unwrap();
let e = connector
.connect("gmail-smtp-in.l.google.com", stream)
.unwrap_err();
eprintln!("{:#?}", e);
}
但是,我得到的响应是:
Failure(
MidHandshakeSslStream {
stream: SslStream {
stream: TcpStream {
addr: V6(
[2001:41d0:a:2346::1]:57190
),
peer: V6(
[2a00:1450:400c:c0c::1b]:25
),
fd: 3
},
ssl: Ssl {
state: "SSLv3/TLS write client hello",
verify_result: X509VerifyResult {
code: 0,
error: "ok"
}
}
},
error: Error {
code: ErrorCode(
1
),
cause: Some(
Ssl(
ErrorStack(
[
Error {
code: 336130315,
library: "SSL routines",
function: "ssl3_get_record",
reason: "wrong version number",
file: "ssl/record/ssl3_record.c",
line: 252
}
]
)
)
)
}
}
)
我猜我在 Rust 代码中缺少 -starttls smtp
部分,但不知道如何添加它。
最佳答案
在 openssl-sources 中更详细地了解 -starttls smtp
实际做了什么,并在 Rust 中重播?这只是几个库调用,但首先您需要与您的服务器对话 STMP,然后然后切换到 TLS。 (也许这已经在一次调用中捆绑在 openssl-library 中。)
关于openssl - 如何使用 rust-openssl 创建与 `-starttls smtp` 等效的连接?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53266542/