2009-05-18 10 views
6

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

+0

जब आप कहते हैं कि डाउनलोड करना आसान हिस्सा है? क्या आप अपनी तकनीक साझा कर सकते हैं जिसका उपयोग आप इसे पूरा करने के लिए करते थे। धन्यवाद – Raj

+0

@राज काफी प्रमाण पत्र प्राधिकरण या हस्ताक्षर प्रमाणपत्र मेटाडेटा के हिस्से के रूप में एक सीआरएल स्थान प्रकाशित करेगा। प्रश्न में प्रमाण पत्र खोलें और "सीआरएल वितरण अंक" नामक फ़ील्ड की तलाश करें। असल में यह एक सामान्य सवाल है जिसे आपको सिर्फ टिप्पणी के रूप में नहीं छोड़ना चाहिए। – Goyuix

+0

हां, मैं प्रमाण पत्र में एक फ़ील्ड के रूप में वितरण बिंदुओं से अवगत हूं। वर्तमान में मैं सीडीपी से पुनर्प्राप्त करने के लिए रिमोट ऑब्जेक्ट पुनर्प्राप्ति कार्यों, [CryptoAPI] का उपयोग करता हूं। मैं यह भी समझता हूं कि यदि आप यूआरएल की प्रतिलिपि बनाते हैं और उन्हें ब्राउज़र में चिपकाते हैं, तो सीआरएल भी डाउनलोड हो जाएगा। मैंने आपको एक टिप्पणी के रूप में क्यों पूछा है कि आपने उल्लेख किया है कि सीआरएल पुनर्प्राप्ति आसान हिस्सा है, इसलिए मैंने माना कि आपके पास कुछ उपयोगिता या कुछ है जो आपके लिए यह करेगा। लेकिन जाहिर है कि मेरी धारणा गलत थी। उत्तर देने के लिये धन्यवाद। – Raj

उत्तर

3

मुझे स्क्रिप्ट के माध्यम से ऐसा करने का कोई तरीका नहीं पता। क्या आप सी कोड लिख सकते हैं? अगर मैं समझता हूं कि आप क्या करना चाहते हैं, तो आप CryptUiWizImport फ़ंक्शन का उपयोग करेंगे, और CRYPTUI_WIZ_IMPORT_SRC_INFO संरचना।

यहाँ एक sample of code that installs a Cert है; संबंधित सीआरएल आयात समान है।

परिशिष्ट:
This post बताते हैं कि Win32 एपीआई (जैसे CryptUiWizImport के रूप में) PowerShell से सीधा नहीं कर रहे हैं, और फिर एक संभावित समाधान, वर्णन करता है: PowerShell स्क्रिप्ट के भीतर से, गतिशील रूप से पैदा करते हैं और है कि सी # कोड संकलन पी/सामग्री को आमंत्रित करें, और उसके परिणामस्वरूप असेंबली चलाएं। यह आपको CryptUiWizImport को एक पावरहेल स्क्रिप्ट से कड़ाई से करने की अनुमति देगा, हालांकि यह एक सुंदर विदेशी होगा।

+1

मैंने CryptUIWizImport फ़ंक्शन को सी # कंसोल एप्लिकेशन के रूप में लपेट लिया और यह दोनों कर्ट और सीआरएल स्थापित करने के लिए एक आकर्षण की तरह काम करता है। आपका बहुत बहुत धन्यवाद! – Goyuix

+1

क्या आप अगले व्यक्ति की सहायता के लिए स्रोत पोस्ट करने में रुचि रखते हैं? – Cheeso

+0

मैं वास्तव में स्रोत में रूचि रखूंगा ... क्योंकि मेरे पास बिल्कुल वही समस्या है। – Mephisztoe

1

PowerShell में एक Cert: प्रदाता जो प्रमाणपत्र संग्रह का प्रतिनिधित्व करता है। इसे मैन्युअल रूप से मानक cmdlets के माध्यम से किया जाता है ताकि आप वहां कहीं भी रद्द करने की सूची को एकीकृत कर सकें। मैं सिर्फ इस बारे में पर्याप्त नहीं जानता कि कैसे विंडोज़ किसी और सहायता के लिए प्रमाणपत्रों को संभालता है।

2

एचएम। क्या certutil.exe उपयोगिता का उपयोग न करने का कोई कारण है? मैं निम्न आदेश चलाकर उचित दुकान में एक प्रमाणपत्र प्रतिसंहरण सूची आयात कर सकते हैं:

certutil -addstore CA <FileName>.crl 
+0

certutil मानक स्थापना का हिस्सा नहीं है। मेरा मानना ​​है कि यह केवल तब स्थापित होता है जब सर्टिफिकेट सेवाएं स्थापित की जाती हैं (हालांकि मैं गलत हो सकता हूं)। – Goyuix

11

यहाँ मेरी अंतिम स्रोत (थोड़ा जनता के लिए झाड़ी) है - लेकिन काम करना चाहिए। मैं स्वीकार किए गए उत्तर को नहीं बदलेगा, लेकिन मुझे आशा है कि इससे मदद मिलेगी (जैसे प्रश्न और उत्तर को ऊपर उठाना!)।

नोट: यह स्थानीय मशीन विश्वसनीय रूट स्टोर में एक सीआरएल या नियमित प्रमाणपत्र दोनों आयात करेगा। CertOpenStore कॉल में CERT_SYSTEM_STORE_LOCAL_MACHINE से CERT_SYSTEM_STORE_CURRENT_USER को बदलकर इसे वर्तमान उपयोगकर्ता स्टोर के लिए काम में बदल दिया जाएगा।

using System; 
using System.Collections.Generic; 
using System.Text; 
using System.Runtime.InteropServices; 

namespace ConsoleApplication2 
{ 
    class Program 
    { 
    public struct CRYPTUI_WIZ_IMPORT_SRC_INFO 
    { 
     public Int32 dwSize; 
     public Int32 dwSubjectChoice; 
     [MarshalAs(UnmanagedType.LPWStr)]public String pwszFileName; 
     public Int32 dwFlags; 
     [MarshalAs(UnmanagedType.LPWStr)]public String pwszPassword; 
    } 

    [DllImport("CryptUI.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern Boolean CryptUIWizImport(
     Int32 dwFlags, 
     IntPtr hwndParent, 
     IntPtr pwszWizardTitle, 
     ref CRYPTUI_WIZ_IMPORT_SRC_INFO pImportSrc, 
     IntPtr hDestCertStore 
    ); 

    [DllImport("CRYPT32.DLL", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern IntPtr CertOpenStore(
     int storeProvider, 
     int encodingType, 
     IntPtr hcryptProv, 
     int flags, 
     String pvPara 
    ); 

    public const Int32 CRYPTUI_WIZ_IMPORT_SUBJECT_FILE = 1; 
    public const Int32 CRYPT_EXPORTABLE = 0x00000001; 
    public const Int32 CRYPT_USER_PROTECTED = 0x00000002; 
    public const Int32 CRYPTUI_WIZ_NO_UI = 0x0001; 

    private static int CERT_STORE_PROV_SYSTEM = 10; 
    private static int CERT_SYSTEM_STORE_CURRENT_USER = (1 << 16); 
    private static int CERT_SYSTEM_STORE_LOCAL_MACHINE = (2 << 16); 

    static void Main(string[] args) 
    { 
     if (args.Length != 1) 
     { 
     Console.WriteLine("Usage: certimp.exe list.crl"); 
     Environment.ExitCode = 1; 
     } 
     else 
     { 
     IntPtr hLocalCertStore = CertOpenStore(
      CERT_STORE_PROV_SYSTEM, 
      0, 
      IntPtr.Zero, 
      CERT_SYSTEM_STORE_LOCAL_MACHINE, 
      "ROOT" 
     ); 

     CRYPTUI_WIZ_IMPORT_SRC_INFO importSrc = new CRYPTUI_WIZ_IMPORT_SRC_INFO(); 
     importSrc.dwSize = Marshal.SizeOf(importSrc); 
     importSrc.dwSubjectChoice = CRYPTUI_WIZ_IMPORT_SUBJECT_FILE; 
     importSrc.pwszFileName = args[0]; 
     importSrc.pwszPassword = null; 
     importSrc.dwFlags = CRYPT_EXPORTABLE | CRYPT_USER_PROTECTED; 

     if (!CryptUIWizImport(
      CRYPTUI_WIZ_NO_UI, 
      IntPtr.Zero, 
      IntPtr.Zero, 
      ref importSrc, 
      hLocalCertStore 
     )) 
     { 
      Console.WriteLine("CryptUIWizImport error " + Marshal.GetLastWin32Error()); 
      Environment.ExitCode = -1; 
     } 
     } 
    } 
    } 
} 
+1

नोट: आप X509Store, Open() भी बना सकते हैं और CryptUIWizImport के अंतिम तर्क के रूप में अपनी StoreHandle प्रॉपर्टी पास कर सकते हैं। – voetsjoeba

+0

नोट: दस्तावेज़ीकरण के बावजूद, CRYPTUI_WIZ_NO_UI झंडे में से कोई भी पॉपअप संवाद को रोकता है जो पूछता है "क्या आप वर्तमान सीआरएल को प्रतिस्थापित करना चाहते हैं?" जब लक्ष्य स्टोर में पहले से ही एक ही या नए वैधता समय के साथ एक सीआरएल होता है। (Win2008 R2 पर परीक्षण किया गया) – voetsjoeba

+1

नोट: एक यूआई के माध्यम से (संभावित रूप से) एक विंडोज सर्टिफिकेट स्टोर में एक सीआरएल जोड़ने का एक और सीधा तरीका है, तो आप crypt32.dll से CertAddCRLContextToStore Win32 फ़ंक्शन को P/Invoke कर सकते हैं। – voetsjoeba

संबंधित मुद्दे