मुझे अपने .NET 5 वेब एपीआई में कुछ अंतिम बिंदुओं पर क्लाइंट प्रमाणपत्र प्रमाणीकरण लागू करने की आवश्यकता है। इसलिए मैं यहाँ MS डॉक्स में। मैं अपने स्थानीय मशीन पर Kestrel का उपयोग कर रहा हूं, IIS एक्सप्रेस या IIS का नहीं।

मैंने निम्नलिखित तीन विधियों को आजमाया है जिनमें से किसी पर भी कोई भाग्य नहीं है:

var clientCertHeaders = context.HttpContext.Request.Headers;

यह अनुरोध के लिए सामान्य शीर्षलेख देता है लेकिन कोई प्रमाणपत्र नहीं देता है।

var clientCert = context.HttpContext.Connection.ClientCertificate;
var clientCertAsync = context.HttpContext.Connection.GetClientCertificateAsync().Result;

ये दोनों शून्य वापस लौटते हैं।

मैंने अपनी सेवाओं में निम्नलिखित को लागू करने का प्रयास किया है:

services.AddCertificateForwarding(options =>
    {
        options.CertificateHeader = "X-SSL-CERT";
        options.HeaderConverter = (headerValue) =>
        {
            X509Certificate2 clientCertificate = null;

            if(!string.IsNullOrWhiteSpace(headerValue))
            {
                var bytes = Encoding.UTF8.GetBytes(headerValue);
                clientCertificate = new X509Certificate2(bytes);
            }

            return clientCertificate;
        };
    });

यहां तक ​​कि मेरी सेवाओं में सक्षम होने के बावजूद मैं क्लाइंट प्रमाणपत्र प्राप्त नहीं कर रहा हूं।

मैं एपीआई अनुरोधों के लिए अनुरोध करने के लिए पोस्टमैन का उपयोग कर रहा हूं।

0
Tachyon 21 अप्रैल 2021, 12:42
आईआईएस के लिए आपके लिंक पर एसएसएल सेटिंग्स के लिए तीन विकल्प हैं 1) अनदेखा करें 2) स्वीकार करें 3) आवश्यकता है। आप विकल्प 2 का उपयोग कर सकते हैं।
 – 
jdweng
21 अप्रैल 2021, 12:56

1 उत्तर

सबसे बढ़िया उत्तर

क्लाइंट प्रमाणपत्रों को program.cs में अनुमति देने के लिए आपको Kestrel को कॉन्फ़िगर करने की आवश्यकता है, डिफ़ॉल्ट मान ClientCertificateMode.NoCertificate है, इसलिए आपके ConfigureWebHostDefaults में आपको इसे ClientCertificateMode.AllowCertificate में बदलने की आवश्यकता है।

आपके द्वारा भेजे गए दस्तावेज़ों से कोड का एक संपादित हिस्सा यहां दिया गया है जहां मैंने ऐसा किया था:

public static IHostBuilder CreateHostBuilder(string[] args)
{
    return Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder =>
        {
            webBuilder.UseStartup<Startup>();
            webBuilder.ConfigureKestrel(o =>
            {
                o.ConfigureHttpsDefaults(o => 
                o.ClientCertificateMode = 
                ClientCertificateMode.AllowCertificate);
            });
        });
}
1
Michal Rosenbaum 21 अप्रैल 2021, 12:59
पूरी तरह से काम किया! शुक्रिया
 – 
Tachyon
21 अप्रैल 2021, 13:01