2011-07-21 17 views
5

मैं एक्सचेंज प्रबंधन शैल सीएमडीलेट्स को कॉल करने के लिए सी # एप्लिकेशन विकसित कर रहा हूं। यह हमेशा गंतव्य कंप्यूटर पर सर्वर प्रमाणपत्र (208.243.XX.2XX: 443) के अपवाद के साथ आता है:
एसएसएल प्रमाणपत्र अज्ञात प्रमाणपत्र प्राधिकरण द्वारा हस्ताक्षरित है।
एसएसएल प्रमाणपत्र में एक सामान्य नाम (सीएन) जो होस्टनाम से मेल नहीं खाता है। "एसएसएल प्रमाणपत्र को अनदेखा करने के लिए कैसे एक अज्ञात प्रमाणपत्र प्राधिकारी समस्या द्वारा हस्ताक्षरित किया गया है?

लेकिन मैंने सभी प्रमाणपत्र स्वीकार करने के लिए कोड लिखा था, पता नहीं क्यों अभी भी त्रुटि प्राप्त है।

मेरे कोड: अंधेरे में

PSCredential credential = new PSCredential("administrator", securePwd); 

    WSManConnectionInfo connectionInfo = new WSManConnectionInfo(new Uri("https://208.243.49.20/powershell"), "http://schemas.microsoft.com/powershell/Microsoft.Exchange", credential); 
    connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic; 

    Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo); 
    PowerShell powershell = PowerShell.Create(); 
    PSCommand command = new PSCommand(); 
    command.AddCommand("New-Mailbox"); 
    command.AddParameter("Name", "TestName"); 
    powershell.Commands = command; 
    ServicePointManager.ServerCertificateValidationCallback += new RemoteCertificateValidationCallback(
    delegate { return true; } 
); 
    try 
    { 
     runspace.Open();//This is where the exception happens 
     powershell.Runspace = runspace; 
     Collection<PSObject> result= powershell.Invoke(); 
    } 

उत्तर

2

WSManConnectionInfo ऑब्जेक्ट में प्रमाणपत्र जांच को छोड़ने के लिए दो गुण हैं।

connectionInfo.SkipCACheck = true; 

connectionInfo.SkipCNCheck = true; 
1

शॉट: इससे पहले कि आप runspace के कहने बनाने शायद ServicePointManager प्रतिनिधि निर्धारित किया है। मैं बस अनुमान लगा रहा हूं कि रनस्पेस उदाहरण का निर्माण प्रतिनिधि को सेवापॉइंट प्रबंधक से कैप्चर और स्टोर कर सकता है।

साथ ही, सुनिश्चित करें कि प्रतिनिधि द्वारा उत्तर दिया गया प्रश्न वह है जो आप सोचते हैं। क्या यह "वैध प्रमाणपत्र" पूछ रहा है? या यह "अवैध प्रमाणपत्र" पूछ रहा है? यदि उत्तरार्द्ध है, तो अपने प्रतिनिधि को {वापसी झूठी में बदलें; }

एक आखिरी बात: क्या एक अलग प्रक्रिया से शक्तियां निष्पादित हो रही हैं? यदि हां, तो ServicePointManager सेटिंग आपकी सहायता नहीं करेगी।

+0

आपके त्वरित उत्तर के लिए धन्यवाद। रनस्पेस, एक ही त्रुटि का उदाहरण बनाने से पहले मैंने ServicePointManager को स्थानांतरित कर दिया। मैंने झूठी, एक ही त्रुटि लौटने के लिए सही वापसी की। मुझे यकीन नहीं है कि क्या एक अलग प्रक्रिया से पावरहेल निष्पादित हो रहा है, लेकिन ऐसा लगता है कि ServicePointManager के पास इस प्रक्रिया में कुछ भी नहीं है। यदि यह एक अलग प्रक्रिया है, तो क्या करना चाहिए? अग्रिम में धन्यवाद। –

+0

क्या आपने इसे पहला आदेश बनाने की कोशिश की है? –

+0

मैं काफी आश्वस्त हो रहा हूं क्योंकि यह एक अलग प्रक्रिया में चल रहा है। आपको Powerhell स्क्रिप्ट ServicePointManager कॉन्फ़िगरेशन चरण के बराबर करने की आवश्यकता है। –

3

मैं ब्रेंट से सहमत हूं, सेवापॉइंट प्रबंधक कॉल को यूरी बनाने से पहले, आपके द्वारा किए गए पहले कॉल के रूप में डालने का प्रयास करें।

प्रतिनिधि को कुछ पैरामीटर भी याद आ रहे हैं। इसे एक शॉट दें:

ServicePointManager.ServerCertificateValidationCallback += (sender, certificate, chain, sslPolicyErrors) => true; 
+0

हाय माइक, उत्तर देने के लिए धन्यवाद। मैंने अपना कोड पहली पंक्ति में रखा है, फिर भी वही त्रुटि मिली है। हो सकता है कि सर्वर प्रमाणपत्र प्रमाणन कॉलबैक के साथ इसका कोई लेना-देना न हो? –

+0

सुंदर! और यह मेरे द्वारा उपयोग किए गए पिछले समाधानों से छोटा है, और अतिरिक्त नामस्थान आयात की आवश्यकता नहीं है। – Colin

3

मुझे लगता है कि ब्रेंट सही है: PowerShell प्रक्रिया में होना आवश्यक है।

[System.Net.ServicePointManager]::ServerCertificateValidationCallback += { $true } 

किसी अविश्वसनीय SSL साइट के खिलाफ निम्न परीक्षण किया है और पुष्टि की त्रुटि को ओवरराइड करता है: ...

$url = "https://www.us.army.mil" 
$wc = new-object system.net.webclient 
$x = $wc.downloadstring($url) # will fail 
[System.Net.ServicePointManager]::ServerCertificateValidationCallback += { $true } 
$x = $wc.downloadstring($url) # should succeed 

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

+0

यह बढ़िया है!मैंने पीएस में अपनी लिपि का परीक्षण किया, जैसा कि आपने कहा था, मुझे इसे पीएस में चलाने की ज़रूरत है। लेकिन मुझे नहीं पता कि PowerShell प्रक्रिया में उस पंक्ति को कैसे जोड़ना है। मैंने कमांड लिखा था। एडस्क्रिप्ट ("[System.Net.ServicePointManager] :: सर्वर प्रमाणपत्र प्रमाणन कॉलबैक + = {$ true}"); लेकिन यह काम नहीं करता है। पीएस में इस स्क्रिप्ट को कैसे जोड़ें? सरल और काम करने वाले उदाहरण के लिए –

+0

+1। –

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