कर्ल: (60) एसएसएल प्रमाणपत्र समस्या: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ


258
root@sclrdev:/home/sclr/certs/FreshCerts# curl --ftp-ssl --verbose ftp://{abc}/ -u trup:trup --cacert /etc/ssl/certs/ca-certificates.crt
* About to connect() to {abc} port 21 (#0)
*   Trying {abc}...
* Connected to {abc} ({abc}) port 21 (#0)
< 220-Cerberus FTP Server - Home Edition
< 220-This is the UNLICENSED Home Edition and may be used for home, personal use only
< 220-Welcome to Cerberus FTP Server
< 220 Created by Cerberus, LLC
> AUTH SSL
< 234 Authentication method accepted
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/certs/ca-certificates.crt
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: http://curl.haxx.se/docs/sslcerts.html

curl performs SSL certificate verification by default, using a "bundle"
 of Certificate Authority (CA) public keys (CA certs). If the default
 bundle file isn't adequate, you can specify an alternate file
 using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
 the bundle, the certificate verification probably failed due to a
 problem with the certificate (it might be expired, or the name might
 not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
 the -k (or --insecure) option.


मैं इसी तरह का मुद्दा था। इसने मेरे लिए काम किया stackoverflow.com/a/29649024
सगरुबो

मेरे मामले में, superuser.com/a/719047/137881 ने मदद की।
अब्दुल

//, मेरे मामले में, मुझे यह त्रुटि HashiCorp वॉल्ट सर्वर के लिए कर्ल अनुरोध करने से मिली, जब तक कि मैंने अंतिम क्रम में केवल अंत-इकाई / इंटरमीडिएट / रूट के साथ X509 प्रमाणपत्र स्थापित नहीं किया, जिनमें से प्रत्येक बेस 64 एनकोडेड था।
नाथन बसानी 19

//, यहाँ त्रुटि को कॉपी करने से पहले आपने इस पर क्या शोध किया?
नाथन बसानी 19

जवाबों:


231

'एसएसएल प्रमाणपत्र समस्या से संबंधित: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ' त्रुटि। यह ध्यान रखना महत्वपूर्ण है कि यह CURL अनुरोध भेजने वाले सिस्टम पर लागू होता है, और अनुरोध प्राप्त करने वाले सर्वर पर नहीं।

  1. Https://curl.haxx.se/ca/cacert.pem से नवीनतम cacert.pem डाउनलोड करें

  2. निम्न पंक्ति को php.ini में जोड़ें: (यदि यह साझा की गई होस्टिंग है और आपके पास php.ini तक पहुंच नहीं है, तो आप इसे .user.ini को public_html में जोड़ सकते हैं)।

    curl.cainfo="/path/to/downloaded/cacert.pem"

    सुनिश्चित करें कि आप दोहरे उद्धरण चिह्नों के भीतर पथ संलग्न करें !!!

  3. डिफ़ॉल्ट रूप से, FastCGI प्रक्रिया हर 300 सेकंड में नई फ़ाइलों को पार्स कर देगी (यदि आवश्यक हो तो आप कुछ फ़ाइलों को जोड़कर आवृत्ति को बदल सकते हैं जैसा कि यहां सुझाया गया है https://ss88.uk/blog/fast-cgi-and-user-ini- files-of-new-htaccess / )।


1
पहला ओपनएसएसएल पुस्तकालय का उपयोग करके किए गए संचालन के प्रमाणन से संबंधित है; CURL का उपयोग करके किए गए दूसरे अनुरोध
माइक

4
वास्तव में मैंने एक घंटे तक संघर्ष किया क्योंकि मैंने उद्धरण के अंदर पथ नहीं लिखा था। तो कृपया यहाँ ध्यान देंcurl.cainfo="/path/to/downloaded/cacert.pem" // Do not forget to write between quotes
हिमांशु उपाध्याय

12
मुझे इस सवाल का कोई संदर्भ PHP में नहीं दिख रहा है। क्यों ते उत्तर में संदर्भ? यदि प्रश्न संपादित किया गया है तो क्या कमांड लाइन का उपयोग करने के लिए उत्तर को संपादित किया जा सकता है?
एडम

5
@Adam जबकि सवाल में PHP का उल्लेख नहीं है, यह PHP द्वारा उत्पन्न विशिष्ट त्रुटि संदेश के लिए Google में # 1 खोज परिणाम के रूप में आता है। तो, शायद यह विशेष रूप से ओपी के सवाल का जवाब नहीं देता है, लेकिन ऐसा लगता है कि यह अभी भी समुदाय के लिए उपयोगी है।
रिनोगो

1
यह उत्तर मेरे लिए भ्रामक था क्योंकि यह
वासिफ खान

141

यह विफल हो रहा है क्योंकि सर्वर द्वारा प्रदान किए गए प्रमाण पत्र को सत्यापित करने में CURL असमर्थ है।

यह काम करने के लिए दो विकल्प हैं:

  1. -kविकल्प के साथ cURL का उपयोग करें जो कर्ल को असुरक्षित कनेक्शन बनाने की अनुमति देता है, अर्थात cURL प्रमाणपत्र को सत्यापित नहीं करता है।

  2. रूट CA (सर्वर प्रमाणपत्र पर हस्ताक्षर करने वाला CA) जोड़ें /etc/ssl/certs/ca-certificates.crt

आपको विकल्प 2 का उपयोग करना चाहिए क्योंकि यह विकल्प है जो यह सुनिश्चित करता है कि आप एफ़टीपी सर्वर से जुड़ रहे हैं।


1
मैंने अपनी rootCA.pem फ़ाइल को अंदर जोड़ा: - root @ sclrdev: / home / certs / FreshCerts # ll /etc/ssl/certs/rootCA.pem -rwxrwxrwx / root रूट 1302 Jul 8 00:09 / etc / ssl / certs rootCA.pem * यहां तक ​​कि मैंने अपने rootCA.pem के साथ ServerCertificate.pem फ़ाइल का सत्यापन किया: - root @ sclrdev: / home / certs / FreshCerts # खुलता है सत्यापित करें -CAfile rootCA.pem ../ServerCertificate.pem ServerCertificate.pem: ठीक है और भी caCA- सर्टिफिकेट के अंदर rootCA.pem की सामग्री। root @ sclrdev: / home / sclr / subhendu / certs / FreshCerts # ll /etc/ssl/certs/ca-certports.crt -rw-r-- 1 रूट रूट 24-2545 जुलाई 8 00:10 / etc / ssl /certs/ca-certports.crt
user3812540

मैं यह पता लगाने में सक्षम नहीं हूं कि मैं कहां गलत हूं। वायरशर्क के निशान में, मुझे निम्नलिखित त्रुटि मिलती है: - क्लाइंट हैलो सर्वर हैलो, प्रमाणपत्र, सर्वर हैलो डोन अलर्ट (स्तर: घातक, विवरण: अज्ञात सीए (48)) क्या आप मुझे मार्गदर्शन कर सकते हैं और इसमें मेरी मदद कर सकते हैं?
user3812540

जिस तरह से ओप्सनल काम करता है, यह सत्यापन के दौरान तेह प्रमाणपत्र श्रृंखला को पूरा करने की कोशिश करता है। क्या आपका सर्वर प्रमाणपत्र एक इंटरमीडिएट सीए द्वारा हस्ताक्षरित है और एक रूट सीए नहीं है। उदाहरण के लिए
युविका जूल

मेरे प्रमाणपत्र पर केवल मूल CA द्वारा हस्ताक्षरित है।
user3812540

1
मुझे कुछ त्रुटि मिली: - root @ sclrdev: ~ # opensl s_client -connect <server_ip>: 21 -showcerts CONNECTED (00000003) 3074050248: त्रुटि: 1407070FC: SSL रूटीन: SSL23_GET_SERVER_HELLO: अज्ञात प्रोटोकॉल: s238clnt कोई सहकर्मी प्रमाणपत्र उपलब्ध नहीं है - कोई क्लाइंट प्रमाणपत्र CA नाम नहीं भेजा गया है - SSL हैंडशेक ने 7 बाइट्स पढ़े हैं और 225 बाइट्स लिखे हैं --- नया, (NONE), सिफर है (कोई नहीं) सिक्योर रेनेगोशिएशन IS समर्थित समर्थित नहीं है: कोई विस्तार नहीं कोई --- मुझे यकीन नहीं है कि यह वास्तव में क्या मतलब है?
user3812540

69

मैंने CURL स्क्रिप्ट में एक लाइन कोड जोड़कर इस समस्या को हल किया है:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

चेतावनी : यह अनुरोध को पूर्ण असुरक्षित बनाता है (@YSU द्वारा उत्तर देखें)!


42
यह समस्या को दरकिनार करने में मदद कर सकता है। लेकिन यह पूरी तरह से https और प्रमाणन प्रणाली के विचार को याद करता है।
स्टीफन रिक्टर

1
काम करता है! यदि आप प्रमाण पत्र की परवाह नहीं करते हैं तो अच्छा त्वरित एन गंदा बाईपास
गिली

2
यह इसे पूरी तरह से असुरक्षित बनाता है।
Moox

1
मैं अपने स्थानीय सर्वर पर इस मुद्दे का सामना कर रहा था, हालांकि उसी कोड ने सर्वर के मंचन पर ठीक काम किया। मेरे लिए ठीक है क्योंकि यह स्थानीय पर था। धन्यवाद
साबिन

1
इस चेक को जोड़ने के लिए सुनिश्चित करें कि आप इसे केवल स्थानीय सर्वर if( stristr("127.0.0.1",$_SERVER["SERVER_NAME"] ) || stristr("localhost",$_SERVER["SERVER_NAME"] )) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
हुसैन

20

मेरे मामले में, यह मेरे सर्टिफिकेट की स्थापना के साथ एक समस्या थी, जिस सेवा पर मैं CURL के साथ उपभोग करने की कोशिश कर रहा था। मैं अपने डोमेन प्रमाणपत्र में इंटरमीडिएट और रूट प्रमाणपत्रों को बंडल / समाप्‍त करने में विफल रहा । पहले यह स्पष्ट नहीं था कि यह समस्या थी क्योंकि क्रोम ने इसे काम किया और प्रमाणपत्र को मध्यवर्ती और मूल प्रमाणपत्र छोड़ने के बावजूद स्वीकार कर लिया।

प्रमाण पत्र को बंडल करने के बाद, सब कुछ उम्मीद के मुताबिक काम किया। मैंने ऐसे ही बांधा

$ cat intermediate.crt >> domain.crt

और सभी मध्यवर्ती और रूट प्रमाण पत्र के लिए दोहराया गया।


2
मुझे एक समान समस्या थी, सिवाय इसके कि मेरे अपाचे SSLCertificateChainFile को सही प्रमाणपत्र पर सेट नहीं किया गया था।
वेन पाइकर्स्की

1
ध्यान दें कि यदि आप ऐसा करते हैं, और crt का आप जोड़ रहे हैं एक अनुगामी newline नहीं है, तो आपके पास -----END CERTIFICATE----------BEGIN CERTIFICATE-----आपके बंडल की तरह लाइनें होंगी , और आपको अस्पष्ट त्रुटि मिलेगी:curl: (77) error setting certificate verify locations
Marty Neal

2
मैं सर्टिफिकेशन सर्टिफिकेट का उपयोग कर रहा हूं, लेकिन सर्वर को केवल सर्टिफिकेट और प्राइवेट की तैनात किया है। मेरे कंप्यूटर पर क्रोम और कर्ल शिकायत नहीं कर रहा था, हालांकि मैं निर्माण कर रहा था कि एक नोडज एप्लिकेशन प्रमाण पत्र को स्वीकार नहीं करता था। सर्वर को फुलचैन तैनात करके इस मुद्दे को ठीक किया! सही दिशा इंगित करने के लिए धन्यवाद!
पाउलो सैंटोस

मेरे मामले में (कोमोडो से प्रमाण पत्र), उन्होंने मध्यवर्ती प्रमाणपत्रों को my-domain.ca- बंडल के रूप में भेजा। मुझे अपने domain.rt में जोड़ना था। धन्यवाद!
जॉन हुल्का

18

मेरे लिए, प्रमाणपत्रों की सरल स्थापना ने मदद की:

sudo apt-get install ca-certificates

2
उदाहरण के लिए, कुछ छोटे डॉकटर कंटेनरों में यह स्थापित नहीं हो सकता है और पूरे पैकेज मौजूद नहीं होने पर किसी और चीज के समस्या निवारण का कोई मतलब नहीं है।
मुनि 764

16

Git एक्सटेंशन v3.48 स्थापित करने के बाद यह समस्या थी। फिर से mysysgit स्थापित करने की कोशिश की लेकिन वही समस्या है। आखिर में, निष्क्रिय करना पड़ा (कृपया सुरक्षा निहितार्थों पर विचार करें!) SSL सत्यापन के साथ:

git config --global http.sslVerify false

लेकिन अगर आपके पास एक डोमेन प्रमाणपत्र बेहतर है तो इसे (Win7) में जोड़ें

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt

23
काम करता है, लेकिन लक्षण को छुपाता है, बीमारी का इलाज नहीं करता है।
मोनोथ्रेड

4
SSL- सत्यापन को अक्षम करना बहुत खतरनाक है
jonasl

1
आप --globalएसएसएल के बिना केवल उस रिपॉजिटरी के लिए अक्षम कर सकते हैं जहां आपके पास समस्याएं हैं। वर्तमान आवश्यक crt फ़ाइलों पर चर्चा के लिए group.google.com/forum/# ​​.topic/git- for- windows/mlqn5J4OLlw देखें ।
कोपरपॉपर

13

हम हाल ही में इस त्रुटि में भाग गए। यह बताता है कि यह CA स्टोर निर्देशिका में ठीक से स्थापित नहीं होने के कारण रूट प्रमाणपत्र से संबंधित था। मैं एक कर्ल कमांड का उपयोग कर रहा था, जहां मैं सीए डीआईआर को सीधे निर्दिष्ट कर रहा था। curl --cacert /etc/test/server.pem --capath /etc/test ...यह आदेश कर्ल के साथ हर बार विफल हो रहा था : (60) एसएसएल प्रमाणपत्र समस्या: स्थानीय जारीकर्ता प्रमाण पत्र प्राप्त करने में असमर्थ।

उपयोग करने के बाद strace curl ..., यह निर्धारित किया गया था कि कर्ल 60ff2731.0 के नाम के साथ रूट सर्टिफिकेट फ़ाइल की तलाश में था, जो कि एक Opensl हैश नामकरण संधि पर आधारित है। इसलिए मुझे यह प्रमाणपत्र रूट प्रमाणपत्र को प्रभावी ढंग से आयात करने के लिए मिला:

ln -s rootcert.pem `खुलता है x509 -hash -noout -in rootcert.em_.0

जो एक सॉफ्टलिंक बनाता है

60ff2731.0 -> rootcert.pem

कर्ल, कवर के तहत server.pem सर्टिफिकेट को पढ़ता है, रूट सर्टिफिकेट फ़ाइल (rootcert.pem) के नाम को निर्धारित करता है, इसे अपने हैश नाम में परिवर्तित करता है, फिर एक OS फ़ाइल खोज करता है, लेकिन इसे खोज नहीं पाया।

तो, takeaway है, कर्ल चलाने पर स्ट्रेस का उपयोग करें जब कर्ल की त्रुटि अस्पष्ट हो (एक जबरदस्त मदद), और फिर खुलने वाले नामकरण सम्मेलन का उपयोग करके रूट प्रमाणपत्र को ठीक से स्थापित करना सुनिश्चित करें।


2
काहे, यह मदद की है। थोड़ा विस्तार करने में मुझे क्या मदद मिली: a) रन स्ट्रेस कर्ल ... b) फेल स्टेट के लिए देखो () कुछ- hex.0 c के साथ) कुछ-हेक्स के लिए गुगली हुई, इसी सर्टिफिकेट d को मिला) / usr / में पाया गया सर्टिफिकेट स्थानीय / शेयर / सीए-सर्टिफिकेट / (* .crt एक्सटेंशन के साथ, * .pem ने काम नहीं किया) ई) अपडेट-सीए-सर्टिफिकेट चलाएं। फिर बिंगो! - आवश्यक सिमलिंक स्वचालित रूप से / usr / lib / ssl / certs / में बनाया गया था
No-Bugs Hare

11

यह सबसे अधिक संभावना सर्वर से एक लापता प्रमाण पत्र है।

Root-> मध्यवर्ती> सर्वर

एक सर्वर को सर्वर और इंटरमीडिएट को न्यूनतम के रूप में भेजना चाहिए।

openssl s_client -showcerts -starttls ftp -crlf -connect abc:21समस्या को डीबग करने के लिए उपयोग करें ।

यदि केवल एक प्रमाणपत्र लौटाया जाता है (या तो स्वयं हस्ताक्षरित है, या जारी किया गया है), तो आपको या तो चुनना होगा:

  1. सर्वर ठीक है
  2. उस प्रमाणपत्र पर विश्वास करें और उसे अपने CA प्रमाणित स्टोर में जोड़ें (सर्वोत्तम विचार नहीं)
  3. अक्षम ट्रस्ट, जैसे curl -k(बहुत बुरा विचार)

यदि सर्वर लौटा, तो एक से अधिक, लेकिन स्व हस्ताक्षरित (रूट) प्रमाण पत्र सहित नहीं:

  1. इस श्रृंखला के लिए अपने CA स्टोर में CA (रूट) प्रमाणपत्र स्थापित करें, जैसे जारीकर्ता को Google। ( केवल यदि आप उस सीए पर भरोसा करते हैं)
  2. श्रृंखला के भाग के रूप में CA भेजने के लिए सर्वर को तय किया है
  3. श्रृंखला में एक प्रमाण पर भरोसा करें
  4. विश्वास अक्षम करें

यदि सर्वर ने रूट CA प्रमाणपत्र लौटाया है, तो वह आपके CA स्टोर में नहीं है, आपके विकल्प हैं:

  1. इसे जोड़ें (विश्वास करें)
  2. विश्वास अक्षम करें

मैंने समय-समय पर समाप्त / निरस्त समारोहों को अनदेखा कर दिया है क्योंकि इसमें कोई संदेश नहीं थे जो इसे इंगित करते थे। लेकिन आप सेरेट्स की जांच कर सकते हैंopenssl x509 -text

यह देखते हुए कि आप एक होम संस्करण ( https://www.cerberusftp.com/support/help/installing-a-certificate/ ) ftp सर्वर से कनेक्ट कर रहे हैं , मैं कह रहा हूं कि यह स्वयं हस्ताक्षरित है।

कृपया अधिक विवरण पोस्ट करें, जैसे कि Opensl से आउटपुट।


6

CURL डॉक्स के अनुसार आप curlकमांड को प्रमाणपत्र भी दे सकते हैं :

एक CA प्रमाणपत्र प्राप्त करें जो दूरस्थ सर्वर को सत्यापित कर सकता है और कनेक्ट करते समय सत्यापन के लिए इस CA प्रमाणपत्र को इंगित करने के लिए उचित विकल्प का उपयोग कर सकता है। के लिए libcurlहैकर्स:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

कर्ल कमांड लाइन टूल के साथ: --cacert [file]


उदाहरण के लिए:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com

5

यह केवल प्रमाणपत्रों की सूची को अपडेट करने के लिए पर्याप्त हो सकता है

sudo update-ca-certificates -f

अपडेट-कै-सर्टिफिकेट एक ऐसा प्रोग्राम है जो एसएसएल सर्टिफिकेट को होल्ड करने के लिए डायरेक्टरी / आदि / एसएलएल / सेरट्स को अपडेट करता है और सर्टिफिकेट्स सर्टिफिकेट, एक सर्टिफिकेट की सिंगल-फाइल लिस्ट बनाता है।


यह किया और सब कुछ इसे चलाने के बाद किया जाता है। लेकिन कर्ल काम नहीं कर रहा है। अभी भी वही त्रुटि है।
अगेम्प्लेयर

1
मैंने कमांड किया, और यह मदद नहीं की, और मैं विश्वास नहीं कर सकता था कि मुझे ऊपर सब कुछ करना है। और फिर आपका जवाब ... '-f' झंडे के लिए धन्यवाद।
एलेक्स श्ट्रोमबर्ग

1
यही वह उपाय है जो मुझे भी आता है। +1
एसएस ऐनी

3

उबंटू में कर्ल को फिर से स्थापित करने का प्रयास करें, और मेरे सीए सेर्ट को sudo update-ca-certificates --freshअपडेट करें जिसके साथ सीरियल्स को अपडेट किया गया है


2

खिड़कियों पर मुझे यह समस्या हो रही थी। कर्ल को mysysgit द्वारा स्थापित किया गया था, इसलिए नवीनतम संस्करण को डाउनलोड करने और स्थापित करने से मेरा मुद्दा ठीक हो गया।

अन्यथा ये आपके सीए सर्टिफिकेट को अपडेट करने के तरीके के अच्छे निर्देश हैं जिन्हें आप आजमा सकते हैं।


2

हाँ, आपको एक CA प्रमाणपत्र भी जोड़ना होगा। स्पष्ट दृश्य के लिए Node.js में एक कोड स्निपेट जोड़ना।

var fs = require(fs)
var path = require('path')
var https = require('https')
var port = process.env.PORT || 8080;
var app = express();

https.createServer({
key: fs.readFileSync(path.join(__dirname, './path to your private key/privkey.pem')),
cert: fs.readFileSync(path.join(__dirname, './path to your certificate/cert.pem')),
ca: fs.readFileSync(path.join(__dirname, './path to your CA file/chain.pem'))}, app).listen(port)

2

मैंने इस समस्या का भी सामना किया है। मैंने इस सूत्र को पढ़ा है और अधिकांश उत्तर सूचनात्मक हैं, लेकिन मेरे लिए जटिल हैं। मैं नेटवर्किंग विषयों में अनुभवी नहीं हूं इसलिए यह उत्तर मेरे जैसे लोगों के लिए है।

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

यहाँ मुझे SSL प्रमाणपत्र आपूर्तिकर्ता से क्या मिला है:

- abc.crt
- abc.pem
- abc-bunde.crt

में abc.crtफ़ाइल, वहाँ केवल एक ही प्रमाण पत्र था:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----

यदि मैंने इसे इस प्रारूप में आपूर्ति की है, तो ब्राउज़र किसी भी त्रुटि (फ़ायरफ़ॉक्स) को नहीं दिखाएगा लेकिन curl: (60) SSL certificate : unable to get local issuer certificateजब मैंने कर्ल अनुरोध किया तो मुझे त्रुटि मिलेगी ।

इस त्रुटि को ठीक करने के लिए, अपनी abc-bunde.crtफ़ाइल की जाँच करें । आप सबसे अधिक कुछ इस तरह से देखेंगे:

-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

ये आपके इंटरमीडिएट और रूट सर्टिफिकेट हैं। त्रुटि इसलिए हो रही है क्योंकि वे SSL प्रमाणपत्र में गायब हैं जो आप अपने आवेदन में आपूर्ति कर रहे हैं।

त्रुटि को ठीक करने के लिए, इन दोनों फ़ाइलों की सामग्री को इस प्रारूप में संयोजित करें:

-----BEGIN CERTIFICATE-----
/*certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*additional certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*other certificate content here*/
-----END CERTIFICATE-----
-----BEGIN CERTIFICATE-----
/*different certificate content here*/
-----END CERTIFICATE-----

ध्यान दें कि प्रमाणपत्र के बीच या फ़ाइल के प्रारंभ में कोई रिक्त स्थान नहीं हैं। एक बार जब आप अपने आवेदन के लिए इस संयुक्त प्रमाण पत्र की आपूर्ति करते हैं, तो आपकी समस्या ठीक होनी चाहिए।


1

खिड़कियों पर - यदि आप cmd से चलते हैं

> curl -X GET "https://some.place"

Https://curl.haxx.se/docs/caextract.html से cacert.pem डाउनलोड करें

पर्यावरण चर सेट करें:

CURL_CA_BUNDLE = C:\Program Files\curl-7.57.0\src\cacert.pem

और पर्यावरण को पुनः लोड करें

refreshenv

अब फिर से प्रयास करें

परेशानी का कारण: https://laracasts.com/discuss/channels/general-discussion/curl-error-60-ssl-certificate-problem-unable-to-get-local-issuer-certificate/replies/95548


1

मेरा मामला अलग था। मैं फ़ायरवॉल के पीछे एक साइट होस्ट कर रहा हूँ। त्रुटि pfSense के कारण हुई थी।

Network layout: |Web Server 10.x.x.x| <-> |pfSense 49.x.x.x| <-> |Open Internet|

मुझे गलती से कारण मिल गया, इस उत्तर के लिए धन्यवाद ।


जब मैं अपनी साइट को WAN से एक्सेस करता हूं तो सब ठीक हो जाता है ।

हालाँकि, जब साइट लैन (जैसे जब वर्डप्रेस ने curlअपने स्वयं के सर्वर से अनुरोध किया, WAN IP का उपयोग करने के बावजूद 49.x.x.x) से एक्सेस किया गया, तो इसे pfSense लॉगिन पेज दिया गया।

मैंने प्रमाण पत्र को पहचान लिया pfSense webConfigurator Self-Signed Certificate। कोई आश्चर्य नहीं कि curlकोई त्रुटि हुई।

कारण: ऐसा क्या हुआ curlजो साइट के WAN IP पते का उपयोग कर रहा था 49.x.x.x। लेकिन, वेब सर्वर के संदर्भ में, WAN IP फ़ायरवॉल था।

डीबग: मैंने पाया कि मुझे pfSense प्रमाणपत्र मिल रहा है।

समाधान: साइट की मेजबानी करने वाले सर्वर पर, अपने स्वयं के डोमेन नाम को 127.0.0.1 पर इंगित करें

समाधान लागू करने से, curlवेब सर्वर द्वारा अनुरोध को ठीक से नियंत्रित किया गया था, और फ़ायरवॉल को अग्रेषित नहीं किया गया था, जिसने लॉगिन पेज भेजकर जवाब दिया था।


0

यह ssh प्रमाणपत्र संग्रह समस्या है। आपको टारगेट CA वेबसाइट से मान्य प्रमाणपत्र pem फ़ाइल डाउनलोड करने की आवश्यकता है, और फिर विश्वसनीय प्रमाण पत्र एसएसएल को निर्देश देने के लिए सॉफ्ट लिंक फ़ाइल का निर्माण करना चाहिए।

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

तुम्हे मिल जाएगा dd8e9d41

हैश नंबर के साथ सॉल्व लिंक बनाएं और फ़ाइल को .0 (डॉट-शून्य) के साथ प्रत्यय दें

dd8e9d41.0

फिर पुनः प्रयास करें।


0
  1. Https://curl.haxx.se/ca/cacert.pem डाउनलोड करें

  2. डाउनलोड करने के बाद, इस फाइल को अपने वैंप सर्वर पर ले जाएं।

    विस्तार के लिए: D: \ wamp \ bin \ php \

  3. फिर नीचे की ओर php.ini फ़ाइल में निम्न पंक्ति जोड़ें।

curl.cainfo = 'डी: \ WAMP \ बिन \ php \ cacert.pem "

  1. अब अपने wamp सर्वर को पुनरारंभ करें।

0

आपको सर्वर सर्टिफ़िकेट को बदलना होगा cert.pemजिससे fullchain.pem
मुझे Perl HTTPS Daemon के साथ एक ही समस्या थी:
मैं बदल गया हूं
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'


-1

अब तक, मैंने इस मुद्दे को कॉर्पोरेट नेटवर्क के भीतर दो कारणों से देखा है, एक या दोनों जो आपके मामले में हो रहे हैं:

  1. नेटवर्क प्रॉक्सी काम करने के तरीके के कारण , उनके पास अपने एसएसएल प्रमाणपत्र हैं, जिससे उन प्रमाणपत्रों को बदल दिया जाता है जो कर्ल देखते हैं। कई या अधिकांश एंटरप्राइज़ नेटवर्क आपको इन प्रॉक्सी का उपयोग करने के लिए बाध्य करते हैं।
  2. क्लाइंट पीसी पर चलने वाले कुछ एंटीवायरस प्रोग्राम भी HTTPS प्रॉक्सी के समान कार्य करते हैं, ताकि वे आपके नेटवर्क ट्रैफ़िक को स्कैन कर सकें। आपके एंटीवायरस प्रोग्राम में इस फ़ंक्शन को अक्षम करने का विकल्प हो सकता है (यह मानते हुए कि आपके व्यवस्थापक इसे अनुमति देंगे)।

एक साइड नोट के रूप में, ऊपर 2 नंबर आपको अपने कथित सुरक्षित टीएलएस ट्रैफ़िक के स्कैन के बारे में असहज महसूस करवा सकता है। यह आपके लिए कॉर्पोरेट दुनिया है।


-1

यह समस्या थी और इसे नए संस्करण के साथ हल नहीं किया गया था। / etc / certs का रूट सर्टिफिकेट था, ब्राउज़र ने कहा कि सब कुछ ठीक है। कुछ परीक्षण के बाद मुझे ssllabs.com से चेतावनी मिली, कि मेरी श्रृंखला पूरी नहीं थी (वास्तव में यह पुराने प्रमाणपत्र के लिए श्रृंखला थी और नई नहीं थी)। प्रमाणित श्रृंखला को सही करने के बाद सब कुछ ठीक था, यहां तक ​​कि कर्ल के साथ भी।


-1

मुझे सभी CA के Digicert से यह समस्या थी। मैंने एक digicertca.pem फ़ाइल बनाई जो सिर्फ मध्यवर्ती थी और जड़ दोनों को एक फ़ाइल में एक साथ चिपकाया गया था।

curl https://cacerts.digicert.com/DigiCertGlobalRootCA.crt.pem
curl https://cacerts.digicert.com/DigiCertSHA2SecureServerCA.crt.pem

curl -v https://mydigisite.com/sign_on --cacert DigiCertCA.pem
...
*  subjectAltName: host "mydigisite.com" matched cert's "mydigisite.com"
*  issuer: C=US; O=DigiCert Inc; CN=DigiCert SHA2 Secure Server CA
*  SSL certificate verify ok.
> GET /users/sign_in HTTP/1.1
> Host: mydigisite.com
> User-Agent: curl/7.65.1
> Accept: */*
...

ईरेकॉन के पास जवाब था, लेकिन केवल अपने आप को और एक दूसरे को अपना जवाब देने के लिए मिला।


-2

विशेष रूप से Windowsउपयोगकर्ताओं के लिए, उपयोग curl-7.57.0-win64-mingwया समान संस्करण के लिए।

यह थोड़ा विलंबित है, और मौजूदा उत्तर सही हैं। लेकिन मुझे अभी भी अपने विंडोज मशीन पर काम करने के लिए थोड़ा संघर्ष करना पड़ा, हालांकि यह प्रक्रिया वास्तव में बहुत आगे है। इसलिए, चरण-दर-चरण प्रक्रिया साझा करना।

यह त्रुटि मूल रूप से है, लक्ष्य URI के प्रमाण पत्र को सत्यापित करने में विफल रहा है। यदि आप प्रमाण पत्र (सीए) जारी करने वाले पर भरोसा करते हैं, तो आप इसे विश्वसनीय प्रमाणपत्रों की सूची में जोड़ सकते हैं।

उसके लिए, URI (जैसे Chrome पर) ब्राउज़ करें और चरणों का पालन करें

  1. सुरक्षित पैडलॉक आइकन पर राइट क्लिक करें
  2. प्रमाणपत्र पर क्लिक करें, यह प्रमाणपत्र विवरण के साथ एक विंडो खोलेगा
  3. 'प्रमाणन पथ' टैब पर जाएं
  4. ROOT सर्टिफिकेट पर क्लिक करें
  5. प्रमाणपत्र देखें पर क्लिक करें, यह एक और प्रमाणपत्र विंडो खोलेगा
  6. विवरण टैब पर जाएं
  7. कॉपी टू फाइल पर क्लिक करें, यह निर्यात विज़ार्ड खोल देगा
  8. अगला पर क्लिक करें
  9. 'बेस -64 एनकोडेड X.509 (.CER)' चुनें
  10. अगला पर क्लिक करें
  11. एक अनुकूल नाम दें जैसे 'MyDomainX.cer' (वांछित निर्देशिका में ब्राउज़ करें)
  12. अगला पर क्लिक करें
  13. समाप्त पर क्लिक करें, यह प्रमाणपत्र फ़ाइल को बचाएगा
  14. अब इस .cerफाइल को खोलें और कंटेंट को कॉपी करें (----- BEGIN CERTIFICATE ----- और ----- END CERTIFICATE -----) सहित
  15. अब उस डायरेक्टरी में जाएं, जहां curl.exeसेव किया गया हैC:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. curl-ca-bundle.crtफ़ाइल को टेक्स्ट एडिटर से खोलें
  17. फ़ाइल के अंत में कॉपी किए गए प्रमाणपत्र पाठ को जोड़ें। सहेजें

अब आपके कमांड को कर्ल में फाइन निष्पादित करना चाहिए।


3
डाउनवोट के कारण पर कुछ टिप्पणी की सराहना की जाएगी
अर्घ्य सी

मुझे "C: \ xampp \ Apache \ bin" (विंडोज़) में "कर्ल-सीए-बंडल-आर्ट" नाम की कोई फ़ाइल नहीं मिली। लगता है कि नीचे वोट इस कारण थे। ऊपर वर्णित "बिन" फ़ोल्डर में मेरा "कर्ल। Exe" है
kathikeyan A

-4

यह आपकी मदद कर सकता है

$client = new Client(env('API_HOST'));
$client->setSslVerification(false);

गुझिया / गुझिया 3. पर परीक्षण


-5

सरल समाधान: IN ~/.sdkman/etc/config, परिवर्तनsdkman_insecure_ssl=true

चरण:
नैनो ~/.sdkman/etc/config
परिवर्तन sdkman_insecure_ssl=falseको sdkman_insecure_ssl=true
बचाने और बाहर निकलने के लिए

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