শংসাপত্রের স্টোরের শংসাপত্রে একটি প্রাইভেট কীতে কীভাবে এএসপি.নেটকে অ্যাক্সেস দেওয়া যায়?


111

আমার কাছে একটি এএসপি.এনইটি অ্যাপ্লিকেশন রয়েছে যা শংসাপত্রের স্টোরের শংসাপত্রে ব্যক্তিগত কী অ্যাক্সেস করে। উইন্ডোজ সার্ভার 2003-এ আমি নেটওয়ার্ক সার্ভিস অ্যাকাউন্টে ব্যক্তিগত কী অ্যাক্সেস দিতে winhttpcertcfg.exe ব্যবহার করতে সক্ষম হয়েছি। আইআইএস 7.5 ওয়েবসাইটে উইন্ডোজ সার্ভার 2008 আর 2 এর শংসাপত্রের স্টোর (লোকাল কম্পিউটার \ পার্সোনাল) এর একটি শংসাপত্রে একটি প্রাইভেট কী অ্যাক্সেসের অনুমতি কীভাবে দেব?

আমি "প্রত্যেকে", "আইআইএস অ্যাপপুল \ ডিফল্ট অ্যাপপুল", "আইআইএস_আইইউএসআরএস" এবং পুরো শংসাপত্রের এমএমসি (সার্ভার ২০০৮ আর 2) ব্যবহার করে যে সুরক্ষা অ্যাকাউন্ট পেয়েছি তার কাছে আমি সম্পূর্ণ ট্রাস্ট অ্যাক্সেস দেওয়ার চেষ্টা করেছি। তবে নীচের কোডটি প্রমাণ করে যে কোডটিতে ব্যক্তিগত শংসাপত্রের প্রাইভেট কীতে প্রাইভেট কী সহ আমদানি করা ছিল না। পরিবর্তে কোডটি প্রতিটি সময় ব্যক্তিগত কী সম্পত্তিটি অ্যাক্সেস করার পরে নিক্ষেপ করে এবং ত্রুটি করে।

Default.aspx

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Import Namespace="System.Security.Cryptography.X509Certificates" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:Repeater ID="repeater1" runat="server">
            <HeaderTemplate>
                <table>
                    <tr>
                        <td>
                            Cert
                        </td>
                        <td>
                            Public Key
                        </td>
                        <td>
                            Private Key
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>
                <tr>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).GetNameInfo(X509NameType.SimpleName, false) %>
                    </td>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).HasPublicKeyAccess() %>
                    </td>
                    <td>
                    <%#((X509Certificate2)Container.DataItem).HasPrivateKeyAccess() %>
                    </td>
                </tr>
            </ItemTemplate>
            <FooterTemplate>
                </table></FooterTemplate>
        </asp:Repeater>
    </div>
    </form>
</body>
</html>

Default.aspx.cs

using System;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Web.UI;
public partial class _Default : Page 
{
    public X509Certificate2Collection Certificates;
    protected void Page_Load(object sender, EventArgs e)
    {
        // Local Computer\Personal
        var store = new X509Store(StoreLocation.LocalMachine);
        // create and open store for read-only access
        store.Open(OpenFlags.ReadOnly);
        Certificates = store.Certificates;
        repeater1.DataSource = Certificates;
        repeater1.DataBind();
    }
}
public static class Extensions
{
    public static string HasPublicKeyAccess(this X509Certificate2 cert)
    {
        try
        {
            AsymmetricAlgorithm algorithm = cert.PublicKey.Key;
        }
        catch (Exception ex)
        {
            return "No";
        }
        return "Yes";
    }
    public static string HasPrivateKeyAccess(this X509Certificate2 cert)
    {
        try
        {
            string algorithm = cert.PrivateKey.KeyExchangeAlgorithm;
        }
        catch (Exception ex)
        {
            return "No";
        }
        return "Yes";
    }
}

উত্তর:


195
  1. ক্রয় শংসাপত্র তৈরি / তৈরি করুন। এটির একটি ব্যক্তিগত কী আছে তা নিশ্চিত করুন।
  2. "স্থানীয় কম্পিউটার" অ্যাকাউন্টে শংসাপত্রটি আমদানি করুন। শংসাপত্র এমএমসি ব্যবহারের জন্য সেরা। "ব্যক্তিগত কী রফতানি করার অনুমতি দিন" তা পরীক্ষা করে দেখুন
  3. যার ভিত্তিতে, আইআইএস 7.5 অ্যাপ্লিকেশন পুলের পরিচয় নীচের একটি ব্যবহার করে।

    • আইআইএস 7.5 ওয়েবসাইট অ্যাপ্লিকেশনপুল আইডেন্টিটির অধীনে চলছে। এমএমসি => শংসাপত্র যুক্ত করুন (স্থানীয় কম্পিউটার) স্ন্যাপ-ইন => শংসাপত্রগুলি (স্থানীয় কম্পিউটার) => ব্যক্তিগত => শংসাপত্রগুলি => আগ্রহের শংসাপত্রের ডানদিকে ক্লিক করুন => সমস্ত কাজগুলি => ব্যক্তিগত কী পরিচালনা করুন>> IIS AppPool\AppPoolNameএটি যোগ করুন এবং মঞ্জুর করুন Full control। আপনার অ্যাপ্লিকেশন পুলের নাম দিয়ে " অ্যাপপুলনাম " প্রতিস্থাপন করুন (কখনও কখনও IIS_IUSRS)
    • আইআইএস 7.5 ওয়েবসাইটটি নেটওয়র্ক সার্ভিসের অধীনে চলছে। শংসাপত্রগুলি এমএমসি ব্যবহার করে "স্থানীয় কম্পিউটার \ ব্যক্তিগত" শংসাপত্রের উপর পুরো ট্রাস্টে "নেটওয়র্ক সার্ভিস" যুক্ত হয়েছে।
    • আইআইএস 7.5 ওয়েবসাইটটি "মাইআইআইএসউসার" স্থানীয় কম্পিউটার ব্যবহারকারী অ্যাকাউন্টের অধীনে চলছে। শংসাপত্রগুলি এমএমসি ব্যবহার করে "মাইআইআইএসইউসার" (একটি নতুন স্থানীয় কম্পিউটার ব্যবহারকারী অ্যাকাউন্ট) "লোকাল কম্পিউটার \ ব্যক্তিগত" শংসাপত্রের উপর ফুল ট্রাস্টে যুক্ত হয়েছে।

@ ফিল হেল মন্তব্যের ভিত্তিতে আপডেট করুন:

সাবধান, আপনি যদি কোনও ডোমেনে থাকেন তবে আপনার ডোমেনটি 'লোকেশন বক্স থেকে' ডিফল্টরূপে নির্বাচন করা হবে। এটিকে "লোকাল কম্পিউটার" এ পরিবর্তন করতে ভুলবেন না। অ্যাপ পুলের সনাক্তকরণগুলি দেখতে অবস্থানটি "লোকাল কম্পিউটার" এ পরিবর্তন করুন।


3
উইন্ডোজ সার্ভার ২০০৮ আর 2-এ কীভাবে ("স্থানীয় কম্পিউটার XXX ব্যক্তিগত" শংসাপত্রের উপরে "সম্পূর্ণ" ট্রাস্ট এ "এক্সএক্সএক্স) কনফিগার করবেন? চালান / এমএমসি / ফাইল / স্ন্যাপ-ইন / শংসাপত্র যুক্ত এবং ??? ধন্যবাদ
কোবাইয়া

7
আপনার যখন স্থানীয় কম্পিউটার \ ব্যক্তিগততে এমএমসি শংসাপত্রগুলি খোলা থাকে, শংসাপত্রগুলি দেখতে "শংসাপত্র" এ ক্লিক করুন। (দ্রষ্টব্য: নিম্নলিখিতটি শংসাপত্রটি ইতিমধ্যে আমদানি করা হয়েছে, প্রথমে শংসাপত্রটি আমদানি না করে ধরে নেওয়া হয়) আপনি যে শংসাপত্রটিতে সম্পূর্ণ নিয়ন্ত্রণ দিতে চান তাতে ডান ক্লিক করুন। প্রসঙ্গ মেনুতে, "সমস্ত কার্য" ক্লিক করুন, তারপরে সাবমেনুতে "ব্যক্তিগত কীগুলি পরিচালনা করুন" এ ক্লিক করুন। সেখান থেকে আপনি শংসাপত্রের জন্য ব্যক্তিগত কীতে 'পড়ুন' অ্যাক্সেস পেতে ইচ্ছুক ব্যবহারকারীদের যুক্ত করতে পারেন।
থেমস

5
স্থানীয় কম্পিউটারটি "অবস্থান থেকে" বাক্সে নির্বাচিত কিনা তা নিশ্চিত করুন। এটি আমাকে কিছুক্ষণ থামিয়ে দিয়েছে। ডোমেনটি ডিফল্টরূপে নির্বাচন করা হয়েছিল সুতরাং আমি লোকাল কম্পিউটারে স্থান পরিবর্তন না করা পর্যন্ত অ্যাপ পুল পরিচয় ব্যবহারকারীটি খুঁজে পেল না
ফিল হেল

3
এডাব্লুএস এর উইন্ডোজ 2012 আর 2 ইসি 2 ভিএম এর (আইআইএস 8 ভিত্তিক) আপনাকে IIS_IUSRSশংসাপত্রের ব্যক্তিগত কীতে অ্যাক্সেস দেওয়া দরকার
ডিপস্পেস 101

4
পাওয়ারশেলের মাধ্যমে কীভাবে এটি করবেন কোনও ধারণা?
Sonjz

43

এমএমসি, শংসাপত্রগুলির মাধ্যমে অনুমতি প্রদানের বিষয়ে নোট, সার্টিফিকেট নির্বাচন করুন, ডান-ক্লিক করুন, সমস্ত-কার্য, "ব্যক্তিগত কী পরিচালনা করুন"

ব্যক্তিগত কীগুলি পরিচালনা করুন কেবলমাত্র ব্যক্তিগত জন্য মেনু তালিকায় থাকে ... সুতরাং আপনি যদি বিশ্বস্ত লোক ইত্যাদিতে নিজের শংসাপত্রটি রেখে থাকেন তবে আপনার ভাগ্য থেকে বঞ্চিত।

আমরা এর আশেপাশে একটি উপায় পেয়েছি যা আমাদের পক্ষে কাজ করে। শংসাপত্রটি ব্যক্তিগতভাবে টেনে আনুন এবং অনুমতি দেওয়ার জন্য ব্যক্তিগত কীগুলি পরিচালনা করুন। অবজেক্ট-টাইপ বিল্ট-ইনগুলি ব্যবহার করতে সেট করতে এবং ডোমেন নয় স্থানীয় মেশিনটি ব্যবহার করতে ভুলবেন না। আমরা ডিফল্ট অ্যাপপুল ব্যবহারকারীকে অধিকার প্রদান করেছি এবং এটিতে রেখে দিয়েছি।

আপনার কাজ শেষ হয়ে গেলে, শংসাপত্রটি আবার টেনে টেনে আনুন যেখানে আপনার প্রাথমিকভাবে এটি ছিল। Presto।


হ্যাঁ এটি ভাল কাজ করে। আমি নীচের পোস্টে একটি উত্তরে এটি উল্লেখ করেছি তবে স্বীকৃত উত্তরটি আরও দীর্ঘ এবং একটি ডাব্লুসিএফ ফাইল ডাউনলোড করার প্রয়োজন হলেও অন্য একটি উত্তর গৃহীত হয়েছিল। stackoverflow.com/questions/10580326/...
টেমস

2
win2003 সার্ভারের জন্য কোনও সমাধান? এটিতে উইন্ডোজ 7
Sonjz

1
@ সোনজ - এই টেকনেটটি পরীক্ষা করে দেখুন , এতে কমান্ড লাইনটি ব্যবহার করার বিষয়ে উল্লেখ করা হয়েছেwinhttpcertcfg
এমএলএইচডিভ

ব্যক্তিগতকৃত ব্যতীত অন্য কোনও কিছুর জন্য যদি আপনার ব্যক্তিগত কী প্রয়োজন হয় তবে আপনি সম্ভবত কিছু ভুল করছেন ... অন্য সমস্ত অবস্থানগুলি আপনার বিশ্বাস করা অন্যান্য / বাহ্যিক সত্তার জন্য। আপনার তাদের ব্যক্তিগত কী থাকা উচিত নয়। তাদের সর্বজনীন কী (শংসাপত্র) যথেষ্ট হওয়া উচিত। আমি এমনকি সাহসের সাথে বলতে চাই যে আপনার যদি তাদের ব্যক্তিগত কী থাকে তবে আপনার তাদের বিশ্বাস করা উচিত নয়।
মার্টিন

15

আপনি যদি আইআইএসে একটি .pfx ফাইল থেকে একটি শংসাপত্র লোড করার চেষ্টা করছেন তবে সমাধানটি এই বিকল্পটি সক্রিয় করার মতো সহজ হতে পারে Application Pool

অ্যাপ পুলটিতে ডান ক্লিক করুন এবং নির্বাচন করুন Advanced Settings

তারপরে সক্ষম করুন Load User Profile


এখানে চিত্র বর্ণনা লিখুন


1
কেন এটি একটি পার্থক্য করে?
মাইকেলD3

3
উইন্ডোজগুলি কেবল তারের মতো হওয়া উচিত। এটি সম্ভবত অস্থায়ীভাবে কোনও ব্যবহারকারী প্রোফাইলে প্রোফাইল লোড হচ্ছে তাই এটির এই বিকল্পটির প্রয়োজন। আমি সম্মত হই যে, আইআইএসের অ্যাক্সেস থাকা কোনও ফাইল থেকে লোড করার সময় এটি প্রয়োজনীয়।
সাইমন_ ওয়েভার

আমি পিডিএফগুলির জন্য ডিজিটাল স্বাক্ষর স্থাপন করার সময় এটি আমাকে সহায়তা করেছিল।
ফ্রেড উইলসন

7

পাওয়ারশেলের মধ্যে কীভাবে এটি করা উচিত তা সম্পর্কে আমি জানতে পেরেছিলাম:

$keyname=(((gci cert:\LocalMachine\my | ? {$_.thumbprint -like $thumbprint}).PrivateKey).CspKeyContainerInfo).UniqueKeyContainerName
$keypath = $env:ProgramData + \Microsoft\Crypto\RSA\MachineKeys\”
$fullpath=$keypath+$keyname

$Acl = Get-Acl $fullpath
$Ar = New-Object System.Security.AccessControl.FileSystemAccessRule("IIS AppPool\$iisAppPoolName", "Read", "Allow")
$Acl.SetAccessRule($Ar)
Set-Acl $fullpath $Acl

6

আমার জন্য, এটি "প্রাইভেট কী রফতানি করার অনুমতি দিন" চেক করে শংসাপত্রটি পুনরায় আমদানি করা ছাড়া আর কিছুই ছিল না।

আমার ধারণা এটি প্রয়োজনীয়, তবে এটি আমাকে শঙ্কিত করে কারণ এটি এই শংসাপত্রটি অ্যাক্সেস করে কোনও তৃতীয় পক্ষের অ্যাপ।


আপনাকে ধন্যবাদ আমি এইভাবে এটি X509 সার্টিফিট 2 সার্ট = নতুন এক্স 509 সার্টিফিকেট 2 (সার্টিবিটস, পাসওয়ার্ড, এক্স509 কেজি স্টোরেজফ্লেজস.এক্সপোর্টেবল | এক্স509 কেজিস্টোরেশনফ্ল্যাজস। পার্সিস্টিকেজি);
জুয়ান লোজোয়া

1

উত্তরগুলি পরিপূরক করা শংসাপত্রের ব্যক্তিগত কী খুঁজে পেতে এবং অনুমতিগুলি যুক্ত করার জন্য এটি একটি গাইড

এই পেতে পথপ্রদর্শক হয় FindPrivateKey.exe জন্য সার্টিফিকেটের ব্যক্তিগত কী খুঁজে গাইডে পাওয়া যায় নি।


0

যদিও আমি উপরের অংশ নিয়েছি, অনেক চেষ্টা করার পরেও আমি এই জায়গায় এসেছি। 1- আপনি যদি স্টোর থেকে শংসাপত্রের অ্যাক্সেস চান তবে এটি উদাহরণ হিসাবে এটি করতে পারেন 2- শংসাপত্রটি তৈরি করা এবং এটি কোনও পাথের মাধ্যমে ব্যবহার করা অনেক সহজ এবং ক্লিনার

Asp.net কোর 2.2 OR1:

using Org.BouncyCastle.Asn1;
using Org.BouncyCastle.Asn1.Pkcs;
using Org.BouncyCastle.Asn1.X509;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Generators;
using Org.BouncyCastle.Crypto.Operators;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Crypto.Prng;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Pkcs;
using Org.BouncyCastle.Security;
using Org.BouncyCastle.Utilities;
using Org.BouncyCastle.X509;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Security.Cryptography.X509Certificates;
using System.Text;
using System.Threading.Tasks;

namespace Tursys.Pool.Storage.Api.Utility
{
    class CertificateManager
    {
        public static X509Certificate2 GetCertificate(string caller)
        {
            AsymmetricKeyParameter caPrivateKey = null;
            X509Certificate2 clientCert;
            X509Certificate2 serverCert;

            clientCert = GetCertificateIfExist("CN=127.0.0.1", StoreName.My, StoreLocation.LocalMachine);
            serverCert = GetCertificateIfExist("CN=MyROOTCA", StoreName.Root, StoreLocation.LocalMachine);
            if (clientCert == null || serverCert == null)
            {
                var caCert = GenerateCACertificate("CN=MyROOTCA", ref caPrivateKey);
                addCertToStore(caCert, StoreName.Root, StoreLocation.LocalMachine);

                clientCert = GenerateSelfSignedCertificate("CN=127.0.0.1", "CN=MyROOTCA", caPrivateKey);
                var p12 = clientCert.Export(X509ContentType.Pfx);

                addCertToStore(new X509Certificate2(p12, (string)null, X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet), StoreName.My, StoreLocation.LocalMachine);
            }

            if (caller == "client")
                return clientCert;

            return serverCert;
        }

        public static X509Certificate2 GenerateSelfSignedCertificate(string subjectName, string issuerName, AsymmetricKeyParameter issuerPrivKey)
        {
            const int keyStrength = 2048;

            // Generating Random Numbers
            CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
            SecureRandom random = new SecureRandom(randomGenerator);

            // The Certificate Generator
            X509V3CertificateGenerator certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            BigInteger serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);
            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            //const string signatureAlgorithm = "SHA256WithRSA";
            //certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

            // Issuer and Subject Name
            X509Name subjectDN = new X509Name(subjectName);
            X509Name issuerDN = new X509Name(issuerName);
            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            DateTime notBefore = DateTime.UtcNow.Date;
            DateTime notAfter = notBefore.AddYears(2);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            AsymmetricCipherKeyPair subjectKeyPair;
            var keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            var keyPairGenerator = new RsaKeyPairGenerator();
            keyPairGenerator.Init(keyGenerationParameters);
            subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            AsymmetricCipherKeyPair issuerKeyPair = subjectKeyPair;

            ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", issuerKeyPair.Private, random);
            // selfsign certificate
            Org.BouncyCastle.X509.X509Certificate certificate = certificateGenerator.Generate(signatureFactory);


            // correcponding private key
            PrivateKeyInfo info = PrivateKeyInfoFactory.CreatePrivateKeyInfo(subjectKeyPair.Private);


            // merge into X509Certificate2
            X509Certificate2 x509 = new System.Security.Cryptography.X509Certificates.X509Certificate2(certificate.GetEncoded());

            Asn1Sequence seq = (Asn1Sequence)Asn1Object.FromByteArray(info.PrivateKeyAlgorithm.GetDerEncoded());
            if (seq.Count != 9)
            {
                //throw new PemException("malformed sequence in RSA private key");
            }

            RsaPrivateKeyStructure rsa = RsaPrivateKeyStructure.GetInstance(info.ParsePrivateKey());
            RsaPrivateCrtKeyParameters rsaparams = new RsaPrivateCrtKeyParameters(
                rsa.Modulus, rsa.PublicExponent, rsa.PrivateExponent, rsa.Prime1, rsa.Prime2, rsa.Exponent1, rsa.Exponent2, rsa.Coefficient);

            try
            {
                var rsap = DotNetUtilities.ToRSA(rsaparams);
                x509 = x509.CopyWithPrivateKey(rsap);

                //x509.PrivateKey = ToDotNetKey(rsaparams);
            }
            catch(Exception ex)
            {
                ;
            }
            //x509.PrivateKey = DotNetUtilities.ToRSA(rsaparams);
            return x509;

        }

        public static AsymmetricAlgorithm ToDotNetKey(RsaPrivateCrtKeyParameters privateKey)
        {
            var cspParams = new CspParameters
            {
                KeyContainerName = Guid.NewGuid().ToString(),
                KeyNumber = (int)KeyNumber.Exchange,
                Flags = CspProviderFlags.UseMachineKeyStore
            };

            var rsaProvider = new RSACryptoServiceProvider(cspParams);
            var parameters = new RSAParameters
            {
                Modulus = privateKey.Modulus.ToByteArrayUnsigned(),
                P = privateKey.P.ToByteArrayUnsigned(),
                Q = privateKey.Q.ToByteArrayUnsigned(),
                DP = privateKey.DP.ToByteArrayUnsigned(),
                DQ = privateKey.DQ.ToByteArrayUnsigned(),
                InverseQ = privateKey.QInv.ToByteArrayUnsigned(),
                D = privateKey.Exponent.ToByteArrayUnsigned(),
                Exponent = privateKey.PublicExponent.ToByteArrayUnsigned()
            };

            rsaProvider.ImportParameters(parameters);
            return rsaProvider;
        }

        public static X509Certificate2 GenerateCACertificate(string subjectName, ref AsymmetricKeyParameter CaPrivateKey)
        {
            const int keyStrength = 2048;

            // Generating Random Numbers
            CryptoApiRandomGenerator randomGenerator = new CryptoApiRandomGenerator();
            SecureRandom random = new SecureRandom(randomGenerator);

            // The Certificate Generator
            X509V3CertificateGenerator certificateGenerator = new X509V3CertificateGenerator();

            // Serial Number
            BigInteger serialNumber = BigIntegers.CreateRandomInRange(BigInteger.One, BigInteger.ValueOf(Int64.MaxValue), random);
            certificateGenerator.SetSerialNumber(serialNumber);

            // Signature Algorithm
            //const string signatureAlgorithm = "SHA256WithRSA";
            //certificateGenerator.SetSignatureAlgorithm(signatureAlgorithm);

            // Issuer and Subject Name
            X509Name subjectDN = new X509Name(subjectName);
            X509Name issuerDN = subjectDN;
            certificateGenerator.SetIssuerDN(issuerDN);
            certificateGenerator.SetSubjectDN(subjectDN);

            // Valid For
            DateTime notBefore = DateTime.UtcNow.Date;
            DateTime notAfter = notBefore.AddYears(2);

            certificateGenerator.SetNotBefore(notBefore);
            certificateGenerator.SetNotAfter(notAfter);

            // Subject Public Key
            AsymmetricCipherKeyPair subjectKeyPair;
            KeyGenerationParameters keyGenerationParameters = new KeyGenerationParameters(random, keyStrength);
            RsaKeyPairGenerator keyPairGenerator = new RsaKeyPairGenerator();
            keyPairGenerator.Init(keyGenerationParameters);
            subjectKeyPair = keyPairGenerator.GenerateKeyPair();

            certificateGenerator.SetPublicKey(subjectKeyPair.Public);

            // Generating the Certificate
            AsymmetricCipherKeyPair issuerKeyPair = subjectKeyPair;

            // selfsign certificate
            //Org.BouncyCastle.X509.X509Certificate certificate = certificateGenerator.Generate(issuerKeyPair.Private, random);

            ISignatureFactory signatureFactory = new Asn1SignatureFactory("SHA512WITHRSA", issuerKeyPair.Private, random);
            // selfsign certificate
            Org.BouncyCastle.X509.X509Certificate certificate = certificateGenerator.Generate(signatureFactory);


            X509Certificate2 x509 = new System.Security.Cryptography.X509Certificates.X509Certificate2(certificate.GetEncoded());

            CaPrivateKey = issuerKeyPair.Private;

            return x509;
            //return issuerKeyPair.Private;

        }

        public static bool addCertToStore(System.Security.Cryptography.X509Certificates.X509Certificate2 cert, System.Security.Cryptography.X509Certificates.StoreName st, System.Security.Cryptography.X509Certificates.StoreLocation sl)
        {
            bool bRet = false;

            try
            {
                X509Store store = new X509Store(st, sl);
                store.Open(OpenFlags.ReadWrite);
                store.Add(cert);

                store.Close();
            }
            catch
            {

            }

            return bRet;
        }

        protected internal static X509Certificate2 GetCertificateIfExist(string subjectName, StoreName store, StoreLocation location)
        {
            using (var certStore = new X509Store(store, location))
            {
                certStore.Open(OpenFlags.ReadOnly);
                var certCollection = certStore.Certificates.Find(
                                           X509FindType.FindBySubjectDistinguishedName, subjectName, false);
                X509Certificate2 certificate = null;
                if (certCollection.Count > 0)
                {
                    certificate = certCollection[0];
                }
                return certificate;
            }
        }

    }
}

বা 2:

    services.AddDataProtection()
//.PersistKeysToFileSystem(new DirectoryInfo(@"c:\temp-keys"))
.ProtectKeysWithCertificate(
        new X509Certificate2(Path.Combine(Directory.GetCurrentDirectory(), "clientCert.pfx"), "Password")
        )
.UnprotectKeysWithAnyCertificate(
        new X509Certificate2(Path.Combine(Directory.GetCurrentDirectory(), "clientCert.pfx"), "Password")
        );

0

শংসাপত্র প্যানেলে, কিছু শংসাপত্র ডান ক্লিক করুন -> সমস্ত টাস্ক -> ব্যক্তিগত কী পরিচালনা করুন -> সম্পূর্ণ নিয়ন্ত্রণ সহ আইআইএস_আইইউএসআরএস ব্যবহারকারী যুক্ত করুন

আমার ক্ষেত্রে, "উত্তর প্রাইভেট কী রফতানি করার অনুমতি দিন" বিকল্প চেক করে আমার শংসাপত্র ইনস্টল করার দরকার নেই, যেমন অন্যান্য উত্তরে বলেছিল।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.