APISIX में सर्टिफिकेट प्रबंधित करने के लिए Vault का उपयोग कैसे करें
June 9, 2023
API गेटवे API जीवनचक्र प्रबंधन में एक प्रमुख बुनियादी घटक है। यह सभी ट्रैफ़िक का प्रवेश द्वार है और डाउनस्ट्रीम क्लाइंट्स से API अनुरोधों को सही अपस्ट्रीम सेवा पर प्रोसेसिंग के लिए रूट करने के लिए जिम्मेदार है। इसलिए, API गेटवे अपस्ट्रीम सेवाओं और डाउनस्ट्रीम क्लाइंट्स के बीच नेटवर्क संचार के लिए काम करता है।
एक नए क्लाउड-नेटिव API गेटवे के रूप में, Apache APISIX डाउनस्ट्रीम क्लाइंट्स और APISIX के बीच, और APISIX और अपस्ट्रीम सेवाओं के बीच TLS/mTLS संचार तंत्र प्रदान करता है, ताकि उनके बीच नेटवर्क सुरक्षा सुनिश्चित की जा सके। APISIX SSL प्रमाणपत्र को एक SSL प्रमाणपत्र ऑब्जेक्ट के रूप में सहेजता है, और TLS प्रोटोकॉल के समर्थन वाले एक्सटेंशन SNI (सर्वर नाम संकेत) के माध्यम से SSL प्रमाणपत्र के डायनामिक लोडिंग को साकार करता है।
APISIX में SSL प्रमाणपत्रों को सुरक्षित रूप से संग्रहीत करने के लिए, APISIX ने HashiCorp Vault के साथ एकीकरण हासिल किया है, इस प्रकार Vault की गुप्त सुरक्षा संग्रहण का लाभ उठाकर SSL प्रमाणपत्रों के एकीकृत प्रबंधन को साकार किया है। यह लेख डाउनस्ट्रीम क्लाइंट और APISIX के बीच HTTPS संचार को कॉन्फ़िगर करने के उदाहरण के रूप में लेता है, ताकि यह बताया जा सके कि APISIX कैसे Vault को एकीकृत करके SSL प्रमाणपत्र प्रबंधन को लागू करता है।

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

APISIX SSL प्रमाणपत्रों को Vault में कैसे संग्रहीत करें
पर्यावरण तैयारी
- Docker इंस्टॉल करें
- cURL इंस्टॉल करें
- एक चल रही APISIX सेवा, या Getting Started tutorial का पालन करके एक APISIX Docker कंटेनर तैनात करें
Vault सेवा को तैनात और कॉन्फ़िगर करें
इस खंड में, हम Docker का उपयोग करके एक Vault कंटेनर सेवा तैनात करेंगे। यदि आपके पर्यावरण में पहले से ही एक Vault सेवा उदाहरण उपलब्ध है, तो आप इस खंड को छोड़ सकते हैं।
Dev मोड में एक Vault कंटेनर बनाएं और तैनात करें, जिसका नाम apisix-quickstart-vault है। Vault टोकन को apisix-quickstart-vault-token के रूप में निर्दिष्ट करें और पोर्ट 8200 को होस्ट पर मैप करें:
docker run -d --cap-add=IPC_LOCK \ -e 'VAULT_DEV_LISTEN_ADDRESS=0.0.0.0:8200' \ -e 'VAULT_ADDR=http://0.0.0.0:8200' \ -e 'VAULT_DEV_ROOT_TOKEN_ID=apisix-quickstart-vault-token' \ -e 'VAULT_TOKEN=apisix-quickstart-vault-token' \ --network=apisix-quickstart-net \ --name apisix-quickstart-vault \ -p 8200:8200 vault:1.13.0
APISIX SSL प्रमाणपत्र संग्रहण पथ के रूप में kv का चयन करें:
docker exec apisix-quickstart-vault vault secrets enable -path=kv -version=1 kv
APISIX को कॉन्फ़िगर करें
APISIX को Vault से SSL प्रमाणपत्र पढ़ने की आवश्यकता है, इसलिए Vault को APISIX को निर्दिष्ट पथ पर पढ़ने की अनुमति देनी चाहिए।
एक Vault पॉलिसी बनाएं जिसका नाम apisix-policy.hcl है, जो APISIX को पथ kv/apisix/ पर पढ़ने की पहुंच प्रदान करता है:
docker exec apisix-quickstart-vault /bin/sh -c "echo ' path \"kv/apisix/*\" { capabilities = [\"read\"] } ' > /etc/apisix-policy.hcl"
बनाई गई पॉलिसी फ़ाइल apisix-policy.hcl को Vault पर लागू करें:
docker exec apisix-quickstart-vault vault policy write apisix-policy /etc/apisix-policy.hcl
एक APISIX सीक्रेट ऑब्जेक्ट बनाएं जिसका id quickstart-secret-id है, ताकि Vault कनेक्शन जानकारी और प्रमाणपत्र संग्रहण पथ को सहेजा जा सके:
curl -i "http://127.0.0.1:9180/apisix/admin/secrets/vault/quickstart-secret-id" -X PUT -d ' { "uri": "http://apisix-quickstart-vault:8200", "prefix": "kv/apisix", "token" : "apisix-quickstart-vault-token" }'
SSL प्रमाणपत्रों को Vault में संग्रहीत करें
एक स्व-हस्ताक्षरित CA प्रमाणपत्र ca.crt और कुंजी ca.key बनाएं:
openssl genrsa -out ca.key 2048 && \ openssl req -new -sha256 -key ca.key -out ca.csr -subj "/CN=ROOTCA" && \ openssl x509 -req -days 36500 -sha256 -extensions v3_ca -signkey ca.key -in ca.csr -out ca.crt
SSL प्रमाणपत्र server.crt और कुंजी server.key CA द्वारा जारी किए जाते हैं, और इसका सामान्य नाम (CN) test.com है:
openssl genrsa -out server.key 2048 && \ openssl req -new -sha256 -key server.key -out server.csr -subj "/CN=test.com" && \ openssl x509 -req -days 36500 -sha256 -extensions v3_req \ -CA ca.crt -CAkey ca.key -CAserial ca.srl -CAcreateserial \ -in server.csr -out server.crt
जारी किए गए SSL प्रमाणपत्र और कुंजी को Vault कंटेनर में कॉपी करें:
docker cp server.key apisix-quickstart-vault:/root/ docker cp server.crt apisix-quickstart-vault:/root/
vault kv put कमांड का उपयोग करके SSL प्रमाणपत्र और कुंजी को एक गुप्त के रूप में संग्रहीत करें, कुंजी ssl है, और संग्रहण पथ kv/apisix है:
docker exec apisix-quickstart-vault vault kv put kv/apisix/ssl test.com.crt=@/root/server.crt test.com.key=@/root/server.key
उपरोक्त कमांड के माध्यम से, हमने Vault में ssl नामक एक गुप्त संग्रहीत किया है, जिसमें 2 कुंजी-मान जोड़े शामिल हैं: प्रमाणपत्र और निजी कुंजी।
Vault में संग्रहीत APISIX SSL प्रमाणपत्र का उपयोग कैसे करें
APISIX डाउनस्ट्रीम क्लाइंट्स और APISIX के बीच, और APISIX और अपस्ट्रीम सेवाओं के बीच TLS/mTLS नेटवर्क एन्क्रिप्शन का समर्थन करता है, जहां Vault में संग्रहीत SSL प्रमाणपत्रों का उपयोग किया जा सकता है। हम क्लाइंट और APISIX के बीच HTTPS संचार को कॉन्फ़िगर करने के उदाहरण के रूप में लेंगे, ताकि यह प्रदर्शित किया जा सके कि APISIX में Vault में संग्रहीत SSL प्रमाणपत्र का उपयोग कैसे करें।
क्लाइंट और APISIX के बीच HTTPS संचार कॉन्फ़िगर करें
एक SSL प्रमाणपत्र ऑब्जेक्ट बनाएं ताकि SSL प्रमाणपत्र को सहेजा जा सके:
curl -i "http://127.0.0.1:9180/apisix/admin/ssls" -X PUT -d ' { "id": "quickstart-tls-client-ssl", "sni": "test.com", "cert": "$secret://vault/quickstart-secret-id/ssl/test.com.crt", "key": "$secret://vault/quickstart-secret-id/ssl/test.com.key" }'
इस ऑब्जेक्ट का sni test.com है, जो प्रमाणपत्र जारी करने वाले CN के साथ मेल खाता है। cert और key जारी किए गए प्रमाणपत्र और निजी कुंजी के अनुरूप हैं, जो स्थापित सीक्रेट संसाधन लोकेटर के माध्यम से Vault से स्वचालित रूप से प्राप्त किए जाते हैं, और संसाधन लोकेटर नियम हैं:
$secret://$manager/$id/$secret_name/$key
- manager: कुंजी प्रबंधन सेवा Vault
- id: APISIX सीक्रेट संसाधन ID
- secret_name: Vault में गुप्त का नाम
- key: गुप्त नाम secret_name में कुंजी-मान जोड़ी की कुंजी
क्लाइंट और APISIX के बीच HTTPS संचार को सत्यापित करें
एक रूट बनाएं ताकि /ip पर भेजे गए सभी अनुरोधों को अपस्ट्रीम httpbin.org पर फॉरवर्ड किया जा सके:
curl -i "http://127.0.0.1:9180/apisix/admin/routes" -X PUT -d ' { "id": "quickstart-client-ip", "uri": "/ip", "upstream": { "nodes": { "httpbin.org:80":1 }, "type": "roundrobin" } }'
cURL का उपयोग करके https://test.com:9443/ip पर एक अनुरोध भेजें, test.com को 127.0.0.1 पर हल करें:
curl -ikv --resolve "test.com:9443:127.0.0.1" "https://test.com:9443/ip"
यदि कॉन्फ़िगरेशन सफल होता है, तो cURL द्वारा लौटाए गए क्लाइंट और APISIX TLS हैंडशेक प्रक्रिया निम्नलिखित परिणामों के समान होगी:
* Added test.com:9443:127.0.0.1 to DNS cache * Hostname test.com was found in DNS cache * Trying 127.0.0.1:9443... * Connected to test.com (127.0.0.1) port 9443 (#0) * ALPN, offering h2 * ALPN, offering http/1.1 * successfully set certificate verify locations: * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: /etc/ssl/certs * TLSv1.3 (OUT), TLS handshake, Client hello (1): * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 * ALPN, server accepted to use h2 * Server certificate: * subject: CN=test.com * start date: Apr 21 07:47:54 2023 GMT * expire date: Mar 28 07:47:54 2123 GMT * issuer: CN=ROOTCA * SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway. * Using HTTP2, server supports multi-use * Connection state changed (HTTP/2 confirmed) * Copying HTTP/2 data in stream buffer to connection buffer after upgrade: len=0 * Using Stream ID: 1 (easy handle 0x556274d632e0) > GET /ip HTTP/2 > Host: test.com:9443 > user-agent: curl/7.74.0 > accept: */* > * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * TLSv1.3 (IN), TLS handshake, Newsession Ticket (4): * old SSL session ID is stale, removing * Connection state changed (MAX_CONCURRENT_STREAMS == 128)! < HTTP/2 200 HTTP/2 200 ...
सारांश
हमने बताया कि APISIX कैसे Vault को एकीकृत करके SSL प्रमाणपत्र प्रबंधन को लागू करता है, और डाउनस्ट्रीम क्लाइंट्स और APISIX के बीच HTTPS संचार के उदाहरण के रूप में कॉन्फ़िगरेशन और एकीकरण चरणों को विस्तार से दिखाया।
APISIX में SSL प्रमाणपत्रों से संबंधित अवधारणाओं और उपयोग परिदृश्यों के लिए, कृपया निम्नलिखित लेखों को देखें: