यहाँ कैसे ग्राहक की आवश्यकता के लिए की एक छोटी सी उदाहरण है प्रमाण पत्र। चाल उपयोगिता दिनचर्या का उपयोग करने के बजाय http.Server
मैन्युअल रूप से बनाने और कॉन्फ़िगर करना है।
package main
import (
"crypto/tls"
"fmt"
"net/http"
)
func main() {
http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
fmt.Fprintf(w, "Hello cert")
})
server := &http.Server{
Addr: ":8090",
TLSConfig: &tls.Config{
ClientAuth: tls.RequireAndVerifyClientCert,
},
}
server.ListenAndServeTLS("cert.pem", "cert.key")
}
महत्वपूर्ण हिस्सा tls.Config
struct जो रास्ता सर्वर, TLS के साथ व्यवहार करेंगे नियंत्रित करते हैं। क्षेत्र ClientAuth क्लाइंट प्रमाणपत्र नीति को पकड़ें, हमारे मामले में क्लाइंट प्रमाण पत्र की आवश्यकता है और इसे सत्यापित करें। ध्यान दें कि अन्य नीतियां उपलब्ध हैं ...
आपको उसी संरचना के ClientCAs
फ़ील्ड पर भी एक नज़र डालना चाहिए, जो आपको रूट सीए की एक सूची का उपयोग करने की अनुमति देता है, जिसे ग्राहक को सत्यापित करना होगा।
नोट: मुझे लगता है कि आप संचार को एन्क्रिप्ट करने के लिए प्रमाणपत्र सर्वर पक्ष का भी उपयोग कर रहे हैं। server.ListenAndServeTLS
विधि अभी भी साइड-इफेक्ट के रूप में आपके लिए बहुत सारे काम करती है। यदि आपको इसकी आवश्यकता नहीं है, तो आपको मैन्युअल रूप से ऐसा करने के लिए इस method में गोता लगाने की आवश्यकता होगी (और यहां तक कि निम्न-स्तरीय विधि server.Serve
का उपयोग करें)।
यह वही है जो मैं चाहता हूं। और मैं अपने आप को फ़ील्ड देखने के लिए प्रमाण पत्र तक कैसे पहुंच सकता हूं? – Druxtan
@Druxtan आप प्रमाणपत्र का विश्लेषण करने के लिए openssl कमांड लाइन उपकरण का उपयोग कर सकते हैं, यदि आपका यही मतलब है। आप इसे गो से कर सकते हैं, लेकिन अगर ग्राहक के पास वैध प्रमाण है तो आपको इसकी आवश्यकता नहीं होनी चाहिए। – Intermernet
आप इसे कर सकते हैं लेकिन यह गधे में दर्द होगा, क्योंकि यह मानक पैकेज द्वारा आंतरिक रूप से संभाला जाता है। – Elwinar