自己署名証明書を使用して、RustでPostgreSQLのSSL接続を使用します


このブログ記事はrust PostgreSQLとYugabyteDBへの接続を作成するための言語です.これはPostgresと互換性がありますので、あまりにも適用されます.これは実際にはとても簡単です.

暗号化されていない単純なPostgres接続


必要な木箱を貨物に加える.TOML :
postgres = "0.19.2"
とメインで接続を実行します.RS
use postgres::{Client, NoTls};

fn main() {
    // no SSL/TLS
    let mut connection = Client::connect("host=192.168.66.201 port=5432 user=postgres password=postgres", NoTls).expect("failed to create notls postgres connection");
    let result = connection.query_one("select 10", &[]).expect("failed to execute select 10 to postgres");
    let value: i32 = result.get(0);
    println!("result of query_one call: {}", value);
}
Postgresのcrateをクライアントとnotlsメソッドのスコープに移動し、接続を作成し、クエリを実行します.QueryRound One ()を使用しました.これは単一の行を返すクエリを実行します.

暗号化/ TLS単純なPostgres接続


しかし、それはSSLでより興味深い取得します.RLSでPostgresとTLS接続を使いたい場合は、OpenSSLとNativeRound TLSの2つのオプションがあります.私が'自己署名証明書'をタイトルに含めた理由は以下の通りです.これは、いくつかの人々があなたがさび、PostgresとTLS接続を自己署名証明書と使用することができないと述べる原因になります.これは本当ではない.
OpenSSLを使用することができます.OpenSSLを安全にしないか?いいえ:OpenSSLはまた、自己署名証明書をデフォルトで使用することを許可しません.しかし、それはあなたが証明書当局の検証を無効にすることができますので、非公式(自己署名)認証局証明書を使用することができます.もちろん、安全であると思われる公式の実装ではすべきではありません.しかし、あなたが公式に署名された証明書を得ることを必要としないで、SSL/TLS接続で走らせることができるように、テストまたは証明の概念セットアップのためにそうするのは完全に良いです.
そのようにします.
カーゴ.TOML :
postgres = "0.19.2"
openssl = "0.10.38"
postgres-openssl = "0.5.0"
メイン.RS
fn main() {
    let mut builder = SslConnector::builder(SslMethod::tls()).expect("unable to create sslconnector builder");
    builder.set_ca_file("/tmp/ca.cert").expect("unable to load ca.cert");
    builder.set_verify(SslVerifyMode::NONE);
    let connector = MakeTlsConnector::new(builder.build());

    let mut connection = Client::connect("host=192.168.66.201 port=5432 sslmode=require user=postgres password=postgres", connector).expect("failed to create tls postgres connection");
    let result = connection.query_one("select 10", &[]).expect("failed to execute select 10 to postgres");
    let value: i32 = result.get(0);
    println!("result of query_one call: {}", value);
}
最初の部分はカスタム作成された認証局証明書に基づくSSL TLSコネクタを構築して、明示的に証明書機関証明書の証明をオフにします.これは、自己署名証明書を使用できるようにするものです.
第2の部分は、接続のTLS仕様がNOTLSからTLSコネクタまで変わるという例外で最初の例と同じです.