#tls #psk #pre-shared #key #tls-connection #encryption-key #client

psk-client

简单包装器,方便使用预共享密钥的TLS连接

9个版本

0.1.8 2021年1月15日
0.1.7 2019年6月2日
0.1.4 2019年3月30日

网络编程中排名第1138位

每月下载量30

MIT许可证

21KB
231

PSK客户端

这是对由openssl crate提供的PSK功能的一个简单包装。欢迎对使其更通用、可用和有信息量的(就错误而言)的PR。

功能

PSK客户端有一个功能,即openssl-vendored,它只是简单地启用openssl crate的vendored功能,更多详细信息,请参阅openssl-rs文档

用法

use psk_client::{PskClient, error::PskClientError};

fn main() -> Result<(), PskClientError> {
    let client = PskClient::builder("127.0.0.1:4433")
        .reset_ciphers()
        .cipher("PSK-AES128-CBC-SHA")
        .cipher("PSK-AES256-CBC-SHA")
        .identity("Client_identity")
        .key("4836525835726d466c743469426c55356e377375436254566d51476937724932")
        .build()?;

    let mut connection = client.connect()?;

    if let Err(msg) = connection.write_all(b"Hello, World!") {
        eprintln!("Error writing to client: {}", msg);
    }

    Ok(())
}

密钥也可以从文件(或实现Read的任何东西)中获取,如下所示

use psk_client::{PskClient, error::PskClientError};
use std::fs::File;

fn main() -> Result<(), PskClientError> {
    let key_file = File::open("/some/path/to/psk.key").unwrap();
    
    let client = PskClient::builder("127.0.0.1:4433")
        .identity("Client_identity")
        .key_from(key_file)?
        .build()?;
    
    let mut connection = client.connect()?;

    if let Err(msg) = connection.write_all(b"Hello, World!") {
        eprintln!("Error writing to client: {}", msg);
    }

    Ok(())
}

默认加密

默认情况下,客户端将使用以下加密,这可以通过在PskClientBuilder上调用reset_ciphers()来清除。您可以通过在PskClientBuilder上调用cipher("<cipher>")来提供自己的加密,无论是在清除预定义的加密之后,还是在它们之上,如第一个示例所示。

  • RSA-PSK-AES256-GCM-SHA384
  • DHE-PSK-AES256-GCM-SHA384
  • RSA-PSK-CHACHA20-POLY1305
  • DHE-PSK-CHACHA20-POLY1305
  • DHE-PSK-AES256-CCM8
  • DHE-PSK-AES256-CCM
  • PSK-AES256-GCM-SHA384
  • PSK-CHACHA20-POLY1305
  • PSK-AES256-CCM8
  • PSK-AES256-CCM
  • RSA-PSK-AES128-GCM-SHA256
  • DHE-PSK-AES128-GCM-SHA256

依赖项

~2-3MB
~72K SLoC