c# शुद्ध.net फ्रेमवर्क का उपयोग करके सर्टिफिकेट जेनरेट और साइन करें



cryptography system.security (1)

संक्षिप्त उत्तर: आप .NET फ्रेमवर्क 4.7.2 में शुरू कर सकते हैं।

यह कार्यक्षमता मूल रूप से .NET कोर 2.0 में CertificateRequest श्रेणी के रूप में जोड़ी गई थी, जो पीकेसीएस # 10 प्रमाणीकरण हस्ताक्षर अनुरोध या एक एक्स 509 (स्व-हस्ताक्षरित या जंजीर) सार्वजनिक कुंजी प्रमाण पत्र का निर्माण कर सकता है।

उस सुविधा के लिए कक्षाएं .NET फ्रेमवर्क 4.7.2 में उपलब्ध कराई गई थीं।

using (RSA parent = RSA.Create(4096))
using (RSA rsa = RSA.Create(2048))
{
    CertificateRequest parentReq = new CertificateRequest(
        "CN=Experimental Issuing Authority",
        parent,
        HashAlgorithmName.SHA256,
        RSASignaturePadding.Pkcs1);

    parentReq.CertificateExtensions.Add(
        new X509BasicConstraintsExtension(true, false, 0, true));

    parentReq.CertificateExtensions.Add(
        new X509SubjectKeyIdentifierExtension(parentReq.PublicKey, false));

    using (X509Certificate2 parentCert = parentReq.CreateSelfSigned(
        DateTimeOffset.UtcNow.AddDays(-45),
        DateTimeOffset.UtcNow.AddDays(365)))
    {
        CertificateRequest req = new CertificateRequest(
            "CN=Valid-Looking Timestamp Authority",
            rsa,
            HashAlgorithmName.SHA256,
            RSASignaturePadding.Pkcs1);

        req.CertificateExtensions.Add(
            new X509BasicConstraintsExtension(false, false, 0, false));

        req.CertificateExtensions.Add(
            new X509KeyUsageExtension(
                X509KeyUsageFlags.DigitalSignature | X509KeyUsageFlags.NonRepudiation,
                false));

        req.CertificateExtensions.Add(
            new X509EnhancedKeyUsageExtension(
                new OidCollection
                {
                    new Oid("1.3.6.1.5.5.7.3.8")
                },
                true));

        req.CertificateExtensions.Add(
            new X509SubjectKeyIdentifierExtension(req.PublicKey, false));

        using (X509Certificate2 cert = req.Create(
            parentCert,
            DateTimeOffset.UtcNow.AddDays(-1),
            DateTimeOffset.UtcNow.AddDays(90),
            new byte[] { 1, 2, 3, 4 }))
        {
            // Do something with these certs, like export them to PFX,
            // or add them to an X509Store, or whatever.
        }
    }
}

यदि आप पुराने संस्करणों पर अटके हुए हैं तो लंबा उत्तर दें: अपना लक्ष्य पूरा करने के लिए कोई नया पी / इनवॉइस जोड़े बिना, आपको निम्नलिखित दस्तावेजों को पढ़ने और समझने की आवश्यकता होगी:

  • आईटीयू-टी X.680 -201508, ASN.1 भाषा
  • IETF RFC 5280 या ITU-T X.509 , दस्तावेज़ जो X.509 प्रमाणपत्र में फ़ील्ड्स की व्याख्या करते हैं।
  • IETF RFC 2986 , PKCS # 10 प्रमाणन हस्ताक्षर अनुरोध की व्याख्या करता है
  • ITU-T X.690 , ASN.1 (DER सहित) के लिए BER एन्कोडिंग परिवार को बताता है, जो आपको बताता है कि X.509 / PKCS # 10 से अर्थ अर्थ प्राप्त करने के लिए बाइट कैसे पढ़ें और लिखें।

और फिर आप एक डीईआर लेखक / पाठक लिख सकते हैं, और जो आप चाहते हैं उसके लिए बस बाइट्स का उत्सर्जन करें।

मैं एक प्रमाणपत्र अनुरोध बनाने के लिए शुद्ध .net कोड का उपयोग करने की कोशिश कर रहा हूं और मेरे पास उपलब्ध CA प्रमाण पत्र (या तो Windows प्रमाणपत्र स्टोर में या एक अलग फ़ाइल के रूप में) के खिलाफ प्रमाण पत्र अनुरोध से एक प्रमाण पत्र बनाने के लिए।

मुझे पता है कि मेरे पास प्रमाणपत्र लोड करने और उनकी जानकारी प्राप्त करने के लिए X509Certificate2 सर्टिफ़िकेट और X509Certificate2 सर्टिफ़िकेट 2 उपलब्ध हैं, लेकिन मुझे System.Security.Cryptography नामस्थान के भीतर कोई भी वर्ग या कार्यक्षमता नहीं System.Security.Cryptography है जो प्रमाणपत्र अनुरोध बनाने के लिए या उपयोग में System.Security.Cryptography जा सकता है। एक नया हस्ताक्षरित प्रमाण पत्र बनाने के लिए इस तरह के प्रमाणपत्र अनुरोध पर हस्ताक्षर करें।

और यद्यपि कि System.Security.Cryptography.Pkcs नामस्थान पर दस्तावेज़ कहते हैं:

System.Security.Cryptography.Pkcs नाम स्थान सार्वजनिक कुंजी क्रिप्टोग्राफ़ी मानक (PKCS) के लिए प्रोग्रामिंग तत्व प्रदान करता है, जिसमें डेटा पर हस्ताक्षर करने, कुंजियों का आदान-प्रदान करने, प्रमाणपत्र का अनुरोध करने , सार्वजनिक कुंजी एन्क्रिप्शन और डिक्रिप्शन और अन्य सुरक्षा फ़ंक्शंस शामिल हैं।

तो, मैं एक प्रमाण पत्र अनुरोध कैसे बना सकता हूं और साइन इन कर सकता हूं। केवल System.Security.Cryptography से शुद्ध शुद्ध .net वर्गों का उपयोग करके एक नया X509 प्रमाणपत्र बनाने का अनुरोध करें?

ध्यान दें:

  • मैं किसी बाहरी निष्पादन योग्य जैसे कि ओपनसेल या मेकअर्ट का उपयोग नहीं करना चाहता
  • मैं BouncyCastle का उपयोग नहीं करना चाहता
  • मैं Windows प्रमाणपत्र नामांकन API का उपयोग नहीं करना चाहता
  • मैं मूल Win32 API फ़ंक्शंस का उपयोग नहीं करना चाहता




system.security