PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Gunakan koneksi SSL PostgreSQL dengan sertifikat yang ditandatangani sendiri

Blogpost ini adalah tentang menggunakan bahasa rust untuk membuat koneksi ke PostgreSQL dan YugabyteDB, yang kompatibel dengan postgres jadi karena itu berlaku juga. Ini sebenarnya sangat sederhana:

koneksi postgres sederhana yang tidak terenkripsi

Tambahkan peti yang diperlukan ke Cargo.toml:

postgres = "0.19.2"

Dan lakukan koneksi di main.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);
}

Pindahkan peti postgres ke dalam ruang lingkup untuk metode Klien dan NoTls, buat koneksi, dan jalankan kueri. Saya menggunakan query_one(), yang mengeksekusi kueri yang seharusnya mengembalikan satu baris.

koneksi postgres sederhana terenkripsi/TLS

Namun, itu menjadi lebih menarik dengan SSL. Jika Anda ingin menggunakan koneksi TLS dengan postgres di rust, ada dua opsi:openssl dan native_tls. Alasan saya memasukkan 'sertifikat yang ditandatangani sendiri' dalam judulnya adalah:sejauh ini, tampaknya peti native_tls tidak mengizinkan sertifikat yang ditandatangani sendiri. Ini tampaknya menyebabkan beberapa orang menyatakan bahwa Anda tidak dapat menggunakan koneksi rust, postgres, dan TLS dengan sertifikat yang ditandatangani sendiri. Ini tidak benar.

Menggunakan openssl Anda bisa. Apakah itu membuat openssl kurang aman? Tidak:openssl juga tidak mengizinkan sertifikat yang ditandatangani sendiri untuk digunakan secara default. Namun, ini memungkinkan Anda untuk menonaktifkan verifikasi untuk otoritas sertifikat, sehingga sertifikat otoritas sertifikat tidak resmi (ditandatangani sendiri) dapat digunakan. Tentu hal itu tidak boleh dilakukan dalam pelaksanaan resmi yang seharusnya aman. Tetapi tidak apa-apa untuk melakukannya untuk pengujian atau penyiapan bukti konsep sehingga Anda dapat menjalankan dengan koneksi SSL/TLS tanpa perlu mendapatkan sertifikat yang ditandatangani secara resmi.

Ini adalah bagaimana hal itu dilakukan:
Kargo.toml:

postgres = "0.19.2"
openssl = "0.10.38"
postgres-openssl = "0.5.0"

main.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);
}

Bagian pertama membangun konektor SSL TLS berdasarkan sertifikat otoritas sertifikat yang dibuat khusus, dan secara eksplisit menonaktifkan verifikasi sertifikat otoritas sertifikat. Inilah yang memungkinkan sertifikat yang ditandatangani sendiri untuk digunakan.

Bagian kedua identik dengan contoh pertama, dengan pengecualian bahwa spesifikasi koneksi TLS diubah dari NoTls ke konektor TLS.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat PILIH dari klausa UPDATE RETURNING di postgres

  2. Kesalahan Postgres:Lebih dari satu baris dikembalikan oleh subquery yang digunakan sebagai ekspresi

  3. Mendapatkan [pengarsip] versi yang tidak didukung (1.13) di header file saat menjalankan pg_restore

  4. Bagaimana saya harus mengimpor data dari CSV ke tabel Postgres menggunakan pgAdmin 3?

  5. ECONNREFUSED untuk Postgres pada nodeJS dengan buruh pelabuhan