CURL Windows पर प्रमाणपत्र को ठीक से सत्यापित क्यों नहीं कर सकता है?


30

जब मैं विंडोज पर कर्ल का उपयोग करने की कोशिश करता हूं, तो एक httpsयूआरएल को पुनः प्राप्त करने के लिए , मुझे खतरनाक "कनेक्शन त्रुटि (60)" मिलती है।

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

सटीक त्रुटि संदेश है:

कर्ल: (60) एसएसएल प्रमाणपत्र समस्या, सत्यापित करें कि CA प्रमाणपत्र ठीक है। विवरण:
त्रुटि: 14090086: एसएसएल दिनचर्या: SSL3_GET_SERVER_CERTIFICATE: प्रमाणपत्र सत्यापन विफल रहा
अधिक जानकारी यहाँ: http://curl.haxx.se/docs/sslcerts.html

इसे कैसे हल करें?


SU शीर्षक में "समस्या" शब्द पसंद नहीं करता है क्योंकि यह वर्णनात्मक नहीं है। यदि आप शब्द "समस्या" के बिना अपने शीर्षक को फिर से उद्धृत करने का कोई तरीका नहीं निकाल सकते हैं, तो आप पर्याप्त प्रयास नहीं कर रहे हैं। :)
गैरेट

1
यह उस संदेश का सटीक उद्धरण है, जिसके बारे में मैं पूछ रहा हूं। मैं उस शब्द को निकालने का प्रयास नहीं करना चाहता, यह एक महत्वपूर्ण है, खोज अनुक्रमण के लिए।
चेसो

@ चेहेसो: पोस्ट कंटेंट के साथ-साथ अनुक्रमित भी हो जाते हैं, कोई आपके प्रश्न की खोज कर रहा है, इसे शीर्षक के तहत विवरण में देखेंगे।
तमारा विज्समैन

जवाबों:


36

मुझे नहीं पता, लेकिन मुझे यह जानकारी एक जगह नहीं मिली।

  1. कर्ल के एसएसएल-जागरूक संस्करण को डाउनलोड करें, या एसएसएल-जागरूक संस्करण का निर्माण स्वयं करें।

  2. से http://curl.haxx.se/docs/caextract.html , cacert.pem फ़ाइल डाउनलोड करें।

  3. उसी निर्देशिका में curl.exe और .pem फ़ाइल रखें।

  4. cacert.pemफ़ाइल का नाम बदलेंcurl-ca-bundle.crt

  5. पुनः चलाएं curl.exe!


संपादित करें:

समस्या को हल करने के अन्य तरीके हैं। यह विशेष रूप से कर्ल के निर्माता द्वारा उत्पादित कैचर पर निर्भर करता है। वह नहीं हो सकता है जो आप चाहते हैं, और विशेष रूप से, यह उन मामलों के लिए काम नहीं कर सकता है जहां आपके पास एसएसएल साइट द्वारा उपयोग किए गए प्रमाण पत्र के लिए एक कम-से-प्रसिद्ध प्रमाणित प्राधिकारी (जैसे कि केवल आपके निगम के लिए जाना जाने वाला प्राधिकरण) है। । उस स्थिति में, आप अपनी curl-ca-bundle.crtफ़ाइल बनाना चाहेंगे । आप IE / Windows स्टोर से इस तरह के एक प्रमाण पत्र को निर्यात करने के लिए certreq.exe और opensl.exe का उपयोग कर सकते हैं, और फिर क्रमशः-से-पेम-प्रारूप में परिवर्तित कर सकते हैं।


1
धन्यवाद!!! मैंने हाल ही में एक HTTPS को CURL करने की कोशिश की और यह जानने की कोशिश की कि काम करने का तरीका क्या है। आपकी तरह, मुझे भी जानकारी के लिए कई तरह के स्रोतों की जाँच करनी थी, लेकिन दुर्भाग्य से, मुझे cURL साइट से प्रमाणित फ़ाइल डाउनलोड करने के बारे में भाग नहीं मिला (मैंने लक्ष्य साइट से प्रमाणपत्र डाउनलोड करने के बारे में बहुत सारी चीज़ें देखीं, " लेकिन यह नहीं)।
21

खुशी है कि यह मदद की।
चीज़ो

इसे कर्ल-सीए-बंडल करने के लिए नाम बदलने की बात क्या है। आर्ट? क्या यह विंडोज़ विशिष्ट है?
नवाफल

धन्यवाद! मैं विंडोज 7 पर curlचिह्नित का उपयोग कर रहा था WinSSL। प्रलेखन लिंक के अनुसार, चिह्नित किए गए संस्करण केवल सिस्टम के प्रमाण पत्र का उपयोग करके काम करना चाहिए। हालाँकि, मुझे तब तक त्रुटि हो रही थी जब तक मैंने आपके समाधान का पालन नहीं किया।
जॉर्ज

हालांकि, यदि अंतिम उपयोगकर्ता के पास व्यवस्थापक रिगेट्स नहीं हैं, तो वे सिस्टम पर संबंधित फ़ोल्डरों पर नया प्रमाण पत्र नहीं डाल पाएंगे। वैकल्पिक रूप से, उपयोगकर्ता पर्यावरण चर का उपयोग कर सकता है set CURL_CA_BUNDLE=<path to crt>। सुनिश्चित करें कि फ़ाइल का प्रारूप उचित हो। यह विधि तब भी काम करेगी, जब आपके पास कई curlइंस्टॉलेशन हों, जैसे git, योनि ...
हारून C

6

मैंने एक PowerShell स्क्रिप्ट बनाई है ca-cert.crtजो आपके Windows प्रमाणन स्टोर (CurrentUser या LocalMachine) में स्थापित CA प्रमाणपत्रों के आधार पर फ़ाइल लिखने में सक्षम है । स्क्रिप्ट को इस तरह से चलाएं:

CreateCaCert.ps1 -StoreLocation CurrentUser | Out-File -Encoding utf8 curl-ca-cert.crt

यह वह curl-ca-cert.crtफ़ाइल बनाएगा जिसे उसी निर्देशिका में संग्रहीत किया curl.exeजाना चाहिए और आपको उन्हीं साइटों को मान्य करने में सक्षम होना चाहिए जैसा कि आप अपने विंडोज अनुप्रयोगों में कर सकते हैं (ध्यान दें कि इस फ़ाइल का भी उपभोग किया जा सकता है git)।

"आधिकारिक" स्क्रिप्ट GitHub पर पाई जा सकती है , लेकिन प्रारंभिक संस्करण संदर्भ के लिए यहां सूचीबद्ध है:

[CmdletBinding()]
Param(
    [ValidateSet(
        [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser,
        [System.Security.Cryptography.X509Certificates.StoreLocation]::LocalMachine)]
    [string]
    $StoreLocation = [System.Security.Cryptography.X509Certificates.StoreLocation]::CurrentUser
)

$maxLineLength = 77

# Open the store
$store = New-Object System.Security.Cryptography.X509Certificates.X509Store ([System.Security.Cryptography.X509Certificates.StoreName]::AuthRoot, $StoreLocation)
$store.Open([System.Security.Cryptography.X509Certificates.OpenFlags]::ReadOnly);

# Write header
Write-Output "# Root certificates ($StoreLocation) generated at $(Get-Date)"

# Write all certificates
Foreach ($certificate in $store.Certificates)
{
    # Start with an empty line
    Write-Output ""

    # Convert the certificate to a BASE64 encoded string
    $certString = [Convert]::ToBase64String($certificate.Export([System.Security.Cryptography.X509Certificates.X509ContentType]::Cert));

    # Write the actual certificate
    Write-Output "# Friendly name: $($certificate.FriendlyName)"
    Write-Output "# Issuer:        $($certificate.Issuer)"
    Write-Output "# Expiration:    $($certificate.GetExpirationDateString())"
    Write-Output "# Serial:        $($certificate.SerialNumber)"
    Write-Output "# Thumbprint:    $($certificate.Thumbprint)"
    Write-Output "-----BEGIN CERTIFICATE-----"
    For ($i = 0; $i -lt $certString.Length; $i += $maxLineLength)
    {
        Write-Output $certString.Substring($i, [Math]::Min($maxLineLength, $certString.Length - $i))
    }
    Write-Output "-----END CERTIFICATE-----"
}

2

दरअसल हमें वही समस्या थी जो Typheous / Ruby के साथ थी। समाधान cacert.pem डाउनलोड कर रहा था और इसे C: \ Windows \ System32 (या जहाँ भी आपका विंडोज़ है) को सहेज रहा है। उसके बाद हमने एक वैश्विक पर्यावरण चर सेट किया , जैसे कि यहाँ "वैरिएबल नाम" होना चाहिए CURL_CA_BUNDLEऔर "वैरिएबल वैल्यू" फ़ाइल के लिए पथ है %SystemRoot%\System32\cacert.pem

नया सीएमडी सत्र शुरू करते समय आप एसएसएल कनेक्शंस को प्रमाणित करने के लिए अब केवल टायपस / लिब्कर्ल चीज का उपयोग कर सकते हैं। मैंने सफलतापूर्वक विंडोज 8.1 के साथ यह कोशिश की है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.