>

터미널에서 다음 명령을 실행할 때

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
                            }
                        ]
                    )
                )
            )
        }
    }
)

-starttls smtp 가 빠진 것 같아요  Rust 코드에 포함되지만 추가하는 방법을 알 수 없습니다.

  • 답변 # 1

    -starttls smtp 가 무엇인지에 대한 openssl-sources에서 더 자세히 살펴보십시오  실제로 Rust에서 재생합니까? 라이브러리 호출은 몇 번이지만, 먼저 서버에 STMP를 말하고그런 다음TLS로 전환해야합니다. (아마도 단일 호출로 openssl 라이브러리에 번들로 제공 될 수 있습니다.)

관련 자료

  • 이전 python - Matplotlib에서 이미지 조작
  • 다음 sql - 누락 된 행을 가져옵니다