PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

स्व-हस्ताक्षरित प्रमाणपत्रों के साथ जंग में PostgreSQL SSL कनेक्शन का उपयोग करें

यह ब्लॉगपोस्ट PostgreSQL और YugabyteDB से कनेक्शन बनाने के लिए रस्ट भाषा का उपयोग करने के बारे में है, जो पोस्टग्रेज़ के साथ वायर-संगत है इसलिए भी लागू होता है। यह वास्तव में अत्यंत सरल है:

अनएन्क्रिप्टेड साधारण पोस्टग्रेज कनेक्शन

Cargo.toml में आवश्यक टोकरा जोड़ें:

postgres = "0.19.2"

और 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);
}

पोस्टग्रेज क्रेट को क्लाइंट और NoTls विधियों के दायरे में ले जाएं, एक कनेक्शन बनाएं, और एक क्वेरी निष्पादित करें। मैंने query_one() का उपयोग किया, जो एक क्वेरी को निष्पादित करता है जो एक पंक्ति को वापस करना चाहिए।

एन्क्रिप्टेड/TLS साधारण पोस्टग्रेज कनेक्शन

हालांकि, यह एसएसएल के साथ और अधिक दिलचस्प हो जाता है। यदि आप जंग में पोस्टग्रेज के साथ टीएलएस कनेक्शन का उपयोग करना चाहते हैं, तो दो विकल्प हैं:ओपनएसएल और नेटिव_टीएलएस। मैंने शीर्षक में 'स्व-हस्ताक्षरित प्रमाणपत्र' शामिल करने का कारण यह है:अब तक, ऐसा लगता है कि मूल_टीएलएस टोकरा स्व-हस्ताक्षरित प्रमाणपत्रों की अनुमति नहीं देता है। ऐसा लगता है कि कुछ लोगों को यह बताने का कारण बनता है कि आप स्व-हस्ताक्षरित प्रमाणपत्रों के साथ जंग, पोस्टग्रेज और टीएलएस कनेक्शन का उपयोग नहीं कर सकते हैं। यह सच नहीं है।

Opensl का उपयोग करके आप कर सकते हैं। क्या यह ओपनएसएल को कम सुरक्षित बनाता है? नहीं:ओपनएसएल डिफ़ॉल्ट रूप से स्व-हस्ताक्षरित प्रमाणपत्रों का उपयोग करने की अनुमति नहीं देता है। हालांकि, यह आपको प्रमाणपत्र प्राधिकरणों के लिए सत्यापन को अक्षम करने की अनुमति देता है, इसलिए अनौपचारिक (स्व-हस्ताक्षरित) प्रमाणपत्र प्राधिकरण प्रमाणपत्रों का उपयोग किया जा सकता है। बेशक यह एक आधिकारिक कार्यान्वयन में नहीं किया जाना चाहिए जिसे सुरक्षित माना जाता है। लेकिन परीक्षण या प्रूफ-ऑफ़-कॉन्सेप्ट सेटअप के लिए ऐसा करना बिल्कुल ठीक है ताकि आप आधिकारिक रूप से हस्ताक्षरित प्रमाणपत्र प्राप्त किए बिना SSL/TLS कनेक्शन के साथ चल सकें।

यह इस प्रकार किया जाता है:
कार्गो.टोएमएल:

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

मुख्य आरएस:

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

पहला भाग एक कस्टम निर्मित प्रमाणपत्र प्राधिकरण प्रमाणपत्र के आधार पर एक एसएसएल टीएलएस कनेक्टर बनाता है, और स्पष्ट रूप से प्रमाणपत्र प्राधिकरण प्रमाणपत्र के सत्यापन को बंद कर देता है। यह वही है जो स्व-हस्ताक्षरित प्रमाणपत्र का उपयोग करने की अनुमति देता है।

दूसरा भाग पहले उदाहरण के समान है, इस अपवाद के साथ कि कनेक्शन के TLS विनिर्देश को NoTls से 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. PostgreSQL के लिए ओपन सोर्स बैकअप प्रबंधन की वर्तमान स्थिति

  2. HikariCP - कनेक्शन उपलब्ध नहीं है

  3. PostgreSQL - JSONB सरणी के प्रत्येक ऑब्जेक्ट में कुंजी जोड़ें

  4. कैसे कोट () PostgreSQL में काम करता है

  5. pg_views . पर क्वेरी से अधूरी जानकारी