दिलचस्प पोस्ट
पायथन MySQL पैरामीटरित प्रश्न मैं Vb.NET या C # का उपयोग कर एक प्रक्रिया को कैसे मारूं? रिकर्सिव फ़ंक्शन में लौटें nvd3 piechart.js – टूलटिप कैसे संपादित करें? क्या मैं किसी भी सी ++ कंपाइलर के लिए सही (bool) मान सकता हूँ == (int) 1? सर्वलेट में JSON स्ट्रिंग पढ़ें Django Class-Based DeleteView का उदाहरण Ifstream से पढ़ना श्वेत स्थान पढ़ा नहीं जाएगा हॉवर प्रभाव IE8 के साथ काम नहीं कर रहा है एंड्रॉइड पर मेरे नोड। जेएस प्रोजेक्ट कैसे चलाएं? Google ड्राइव PHP API – सरल फ़ाइल अपलोड यूनिक्स कमांड लाइन JSON पार्सर? ऑब्जेक्ट == रिक्त या शून्य == ऑब्जेक्ट? PHP में डायनामिक क्लास नाम वाले क्लास से स्थिर संपत्ति प्राप्त करना फायरबेज में, क्या सभी नोड डेटा को लोड किए बिना नोड के बच्चों की संख्या प्राप्त करने का कोई तरीका है?

प्रमाण पत्र की दुकान में एक प्रमाण पत्र में निजी कुंजी के लिए ASP.NET का उपयोग कैसे करें?

मेरे पास एक asp.net अनुप्रयोग है जो प्रमाण पत्र की दुकान में प्रमाण पत्र में निजी कुंजी को एक्सेस करता है। Windows Server 2003 पर मैं नेटवर्कर सेवा खाते में निजी कुंजी पहुंच देने के लिए winhttpcertcfg.exe का उपयोग करने में सक्षम था। मैं प्रमाण पत्र स्टोर (स्थानीय कंप्यूटर \ व्यक्तिगत) में एक प्रमाणपत्र में एक निजी कुंजी तक पहुँचने के लिए एक IIS 7.5 वेबसाइट पर एक Windows Server 2008 R2 पर कैसे अनुमति देता है?

मैंने "हर कोई", "आईआईएस AppPool \ DefaultAppPool", "IIS_IUSRS" पर पूर्ण विश्वास पहुंच देने की कोशिश की है, और प्रमाण पत्र एमएमसी (सर्वर 2008 R2) का उपयोग करने के लिए मुझे जो भी सुरक्षा खाता मिला है। हालांकि नीचे दिए गए कोड से पता चलता है कि निजी कुंजी के साथ आयात किए गए प्रमाण पत्र के निजी कुंजी तक कोड का उपयोग नहीं है इसके बजाय कोड हर बार निजी कुंजी प्रॉपर्टी तक पहुंचाता है और त्रुटि होती है

default.aspx

  <% @ पेज भाषा = "सी #" ऑटोइवेंटवायरअप = "सच" कोडफ़ाइल = "डिफ़ॉल्ट.aspx.cs" इनहेरिट्स = "_ डिफ़ॉल्ट"%>
 <% @ आयात नामस्थान = "System.Security.Cryptography.X509 प्रमाणपत्र"%>
 <! DOCTYPE HTML PUBLIC "- // W3C // DTD एक्सएचटीएमएल 1.0 ट्रांसक्रिप्शन // एन" " 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>
         <एएसपी: पुनरावर्तक आईडी = "रिकेटर 1" रनैट = "सर्वर">
             <HeaderTemplate>
                 <Table>
                     <Tr>
                         <Td>
                             प्रमाणपत्र
                         </ Td>
                         <Td>
                             सार्वजनिक कुंजी
                         </ Td>
                         <Td>
                             निजी चाबी
                         </ Td>
                     </ Tr>
             </ HeaderTemplate>
             <ItemTemplate>
                 <Tr>
                     <Td>
                     <% # ((X509Certificate2) कंटेनर.डेटाइटम) .GetNameInfo (X509NameType.SimpleName, false)%>
                     </ Td>
                     <Td>
                     <% # ((X509Certificate2) कंटेनर.डेटाइटम)। PublicKeyAccess ()%>
                     </ Td>
                     <Td>
                     <% # ((X509Certificate2) कंटेनर.डेटाइटम) .HasPrivateKeyAccess ()%>
                     </ Td>
                 </ Tr>
             </ ItemTemplate>
             <FooterTemplate>
                 </ तालिका> </ FooterTemplate>
         </ एएसपी: पुनरावर्तक>
     </ Div>
     </ Form>
 </ Body>
 </ Html> 

Default.aspx.cs

 सिस्टम का उपयोग कर;
 System.Security.Cryptography का उपयोग कर;
 System.Security.Cryptography.X509 प्रमाणपत्रों का उपयोग कर;
 System.Web.UI का उपयोग कर;
 सार्वजनिक आंशिक कक्षा _Default: पेज 
 {
     सार्वजनिक X509Certificate2Collection प्रमाणपत्र;
     संरक्षित शून्य पेज_लोड (ऑब्जेक्ट प्रेषक, इवेंटएरग्स ई)
     {
         // स्थानीय कंप्यूटर \ व्यक्तिगत
         var स्टोर = नया X509 स्टोर (स्टोर स्थान। स्थानीय मेकाइन);
         // पढ़ें और केवल पढ़ने के लिए स्टोर खोलें
         store.Open (OpenFlags.ReadOnly);
         प्रमाणपत्र = स्टोर। प्रमाणपत्र;
         repeater1.DataSource = प्रमाणपत्र;
         repeater1.DataBind ();
     }
 }
 सार्वजनिक स्थैतिक कक्षा एक्सटेंशन
 {
     सार्वजनिक स्थिर स्ट्रिंग HasPublicKeyAccess (यह X509Certificate2 cert)
     {
         प्रयत्न
         {
             असममित एल्गोरिथ्म एल्गोरिथ्म = cert.PublicKey.Key;
         }
         पकड़ (अपवाद पूर्व)
         {
             वापसी "नहीं";
         }
         वापसी "हां";
     }
     सार्वजनिक स्थिर स्ट्रिंग HasPrivateKeyAccess (यह X509Certificate2 cert)
     {
         प्रयत्न
         {
             स्ट्रिंग एल्गोरिथम = cert.PrivateKey.KeyExchangeAlgorithm;
         }
         पकड़ (अपवाद पूर्व)
         {
             वापसी "नहीं";
         }
         वापसी "हां";
     }
 } 

Solutions Collecting From Web of "प्रमाण पत्र की दुकान में एक प्रमाण पत्र में निजी कुंजी के लिए ASP.NET का उपयोग कैसे करें?"

  1. बनाएँ / खरीदी प्रमाणपत्र सुनिश्चित करें कि इसमें एक निजी कुंजी है
  2. "स्थानीय कंप्यूटर" खाते में प्रमाण पत्र आयात करें प्रमाण पत्र का उपयोग करने के लिए सर्वश्रेष्ठ एमएमसी सुनिश्चित करें कि "निजी कुंजी को निर्यात करने की अनुमति दें"
  3. इस आधार पर, IIS 7.5 अनुप्रयोग पूल की पहचान निम्न में से एक का उपयोग करें।

    • IIS 7.5 वेबसाइट ApplicationPoolIdentity के तहत चल रहा है ओपन एमएमसी => सर्टिफिकेट्स जोड़ें (स्थानीय कंप्यूटर) स्नैप-इन => सर्टिफिकेट्स (स्थानीय कंप्यूटर) => पर्सनल => सर्टिफिकेट्स => सर्टिफिकेट ऑफ ब्याज => सभी कार्य => निजी कुंजी को प्रबंधित करें => IIS AppPool\AppPoolName जोड़ें IIS AppPool\AppPoolName और इसे Full control अपने अनुप्रयोग पूल (कभी-कभी IIS_IUSRS ) के नाम के साथ " AppPoolName " बदलें
    • आईआईएस 7.5 वेबसाइट नेटवर्क सेवा के तहत चल रही है। प्रमाण पत्र एमएमसी का प्रयोग, "स्थानीय कंप्यूटर \ व्यक्तिगत" में प्रमाण पत्र पर पूर्ण विश्वास के लिए "नेटवर्क सेवा" जोड़ा गया है।
    • IIS 7.5 वेबसाइट "MyIISUser" स्थानीय कंप्यूटर उपयोगकर्ता खाते के अंतर्गत चल रही है I सर्टिफिकेट एमएमसी का प्रयोग, "स्थानीय कम्प्यूटर \ व्यक्तिगत" में प्रमाण पत्र पर पूर्ण विश्वास के लिए "माइइज़यूसर" (एक नया स्थानीय कंप्यूटर उपयोगकर्ता खाता) जोड़ा गया

फिलिल हेल की टिप्पणी के आधार पर अपडेट:

सावधान रहें, यदि आप किसी डोमेन पर हैं, तो आपके डोमेन को 'स्थान से बॉक्स' में डिफ़ॉल्ट रूप से चुना जाएगा। इसे "स्थानीय कंप्यूटर" में बदलना सुनिश्चित करें ऐप पूल पहचान को देखने के लिए स्थान को "स्थानीय कंप्यूटर" में बदलें

एमएमसी, कर्ट्स, सर्ट का चयन करें, राइट-क्लिक, ऑल-कंस, "प्राइवेट कीज प्रबंधित करें" के माध्यम से अनुमति देने पर नोट करें

निजी कुंजी प्रबंधित करें केवल व्यक्तिगत के लिए मेनू सूची पर है … इसलिए यदि आप विश्वसनीय लोगों में अपने प्रमाणपत्र डालते हैं, तो आप भाग्य से बाहर हैं।

हमें इसके चारों ओर एक रास्ता मिल गया, जिसने हमारे लिए काम किया। निजी को खींचें और छोड़ें, अनुमतियां देने के लिए निजी कुंजी प्रबंधित करें। ऑब्जेक्ट-प्रकार बिल्ट-इन का उपयोग करने के लिए सेट करना याद रखें और स्थानीय मशीन नहीं डोमेन का उपयोग करें। हमने DefaultAppPool उपयोगकर्ता को अधिकार दिए और उस पर उसे छोड़ दिया।

एक बार जब आप पूरा कर लेंगे, प्रमाणपत्र वापस खींचें और ड्रॉप करें, जहां आपने मूल रूप से यह किया था। Presto।

मेरे लिए, यह "निजी कुंजी को निर्यात करने की अनुमति दें" चेक किए गए प्रमाण पत्र के साथ पुनः आयात करने से कुछ भी नहीं था।

मुझे लगता है कि यह आवश्यक है, लेकिन यह मुझे घबराहट करता है क्योंकि यह एक प्रमाण पत्र का उपयोग करने वाला तीसरा पक्ष ऐप है

मैंने सोचा कि यह कैसे पावरशेल में करना है कि किसी ने इसके बारे में पूछा:

 $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 

यदि आप आईआईएस में एक .pfx फ़ाइल से एक प्रमाणपत्र लोड करने का प्रयास कर रहे हैं तो समाधान इस तरह के Application Pool लिए इस विकल्प को सक्षम करने के रूप में आसान हो सकता है।

ऐप पूल पर राइट क्लिक करें और Advanced Settings चुनें।

फिर Load User Profile सक्षम करें

यहां छवि विवरण दर्ज करें