Неизвестный эмитент при рукопожатии tls в Rust с asyn c -tls - PullRequest
2 голосов
/ 01 марта 2020

Я строил свое клиент-серверное приложение с asyn c -tls , делающим что-то действительно похожее на examples , но когда я пытаюсь выполнить TLS-рукопожатие, оно паникует с этим ошибка:

thread 'main' panicked at 'Awaiting TLS failed: Custom { kind: InvalidData, error: WebPKIError(UnknownIssuer) }', src/main.rs:15:26
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

Мой код в клиенте просто:

let tcp_stream = TcpStream::connect("localhost:5568")
    .await
    .expect("TCP handshake failed.");

let tls_connector = TlsConnector::default();
let mut tls_stream = tls_connector
    .connect("localhost", tcp_stream)
    .expect("TLS handshake failed.")
    .await
    .expect("Awaiting TLS failed");

Также я скопировал сертификат CA под /usr/local/share/ca-certificates/ и выполнил sudo update-ca-certificates (linux из курс). Есть идеи, что я делаю не так? Спасибо.

1 Ответ

2 голосов
/ 02 марта 2020

Я использовал rustls , который не интегрирует сертификаты ОС.

Решено с этим:

let mut config = ClientConfig::new();

let cafile = Path::new("path of trusted CA chain");
let file = async_std::fs::read(cafile)
    .await
    .expect("Failed to read file.");
let mut pem = Cursor::new(file);
config
    .root_store
    .add_pem_file(&mut pem)
    .map_err(|_| io::Error::new(io::ErrorKind::InvalidInput, "invalid cert"))
    .expect("Unable to create configuration object.");

let tls_connector = TlsConnector::from(Arc::new(config));

Спасибо u / Wilem82 (из reddit) за намек.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...