curl: (60) Masalah sertifikat SSL: tidak bisa mendapatkan sertifikat penerbit lokal

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.
pengguna3812540
sumber
Saya punya masalah serupa. Ini bekerja untuk saya stackoverflow.com/a/29649024
Sagruob
Dalam kasus saya, superuser.com/a/719047/137881 membantu.
Abdull
//, Dalam kasus saya, saya mendapatkan kesalahan ini dari membuat permintaan curl ke server Vault HashiCorp sampai saya menginstal sertifikat X509 dengan entitas akhir / Intermediate / root hanya dalam urutan terbalik, yang masing-masingnya dienkode Base64.
Nathan Basanese
//, penelitian apa yang kamu lakukan sebelum menyalin kesalahan ke sini?
Nathan Basanese

Jawaban:

231

Berkaitan dengan 'masalah sertifikat SSL: tidak bisa mendapatkan kesalahan sertifikat penerbit lokal'. Penting untuk dicatat bahwa ini berlaku untuk sistem yang mengirimkan permintaan CURL, dan BUKAN server menerima permintaan.

  1. Unduh cacert.pem terbaru dari https://curl.haxx.se/ca/cacert.pem

  2. Tambahkan baris berikut ke php.ini: (jika ini adalah shared hosting dan Anda tidak memiliki akses ke php.ini maka Anda bisa menambahkan ini ke .user.ini di public_html).

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

    Pastikan Anda menyertakan lintasan dalam tanda kutip ganda !!!

  3. Secara default, proses FastCGI akan mem-parsing file baru setiap 300 detik (jika diperlukan Anda dapat mengubah frekuensi dengan menambahkan beberapa file seperti yang disarankan di sini https://ss88.uk/blog/fast-cgi-and-user-ini- file-the-new-htaccess / ).

Dahomz
sumber
1
Yang pertama berkaitan dengan sertifikasi operasi yang dilakukan menggunakan perpustakaan OpenSSL; yang kedua untuk permintaan yang dibuat menggunakan cURL
Mike
4
Sebenarnya saya berjuang selama satu jam karena saya tidak menulis path di dalam tanda kutip. Jadi tolong perhatikan di sinicurl.cainfo="/path/to/downloaded/cacert.pem" // Do not forget to write between quotes
Himanshu Upadhyay
12
Saya tidak melihat referensi apa pun dalam pertanyaan ke PHP. Mengapa referensi dalam jawabannya? Jika pertanyaan telah diedit maka bisakah jawabannya diedit untuk mencerminkan baris perintah yang sekarang digunakan?
Adam
5
@ Adam Sementara pertanyaannya tidak menyebutkan PHP, ini muncul sebagai hasil pencarian # 1 di Google untuk pesan kesalahan spesifik yang dihasilkan oleh PHP. Jadi, mungkin itu tidak secara khusus menjawab pertanyaan OP, tetapi tampaknya masih bermanfaat bagi masyarakat.
rinogo
1
Jawaban ini menyesatkan saya karena ini adalah solusi yang berkaitan dengan PHP
Wasif Khan
141

Gagal karena cURL tidak dapat memverifikasi sertifikat yang disediakan oleh server.

Ada dua opsi untuk membuatnya berfungsi:

  1. Gunakan cURL dengan -kopsi yang memungkinkan curl untuk membuat koneksi yang tidak aman, yaitu cURL tidak memverifikasi sertifikat.

  2. Tambahkan root CA (CA menandatangani sertifikat server) ke /etc/ssl/certs/ca-certificates.crt

Anda harus menggunakan opsi 2 karena itu opsi yang memastikan bahwa Anda terhubung ke server FTP yang aman.

Yuvika
sumber
1
Saya menambahkan file rootCA.pem saya di dalam: - root @ sclrdev: / home / certs / FreshCerts # ll /etc/ssl/certs/rootCA.pem -rwxrwxrwx 1 root root 1302 8 Jul 8 00:09 / etc / ssl / certs / rootCA.pem * Bahkan saya memverifikasi file ServerCertificate.pem dengan rootCA.pem saya: - root @ sclrdev: / home / certs / FreshCerts # openssl memverifikasi -CAfile rootCA.pem ../ServerCertificate.pem ServerCertificate.pem: OK Dan juga isi rootCA.pem di dalam ca-Certificate.crt. root @ sclrdev: / home / sclr / subhendu / certs / FreshCerts # ll /etc/ssl/certs/ca-certificates.crt -rw-r - r-- 1 root root 247945 8 Juli 8 00:10 / etc / ssl /certs/ca-certificates.crt
user3812540
Saya tidak dapat menemukan di mana saya salah. Dalam jejak WireShark, saya mendapatkan kesalahan berikut: - Klien Hello Server Halo, Sertifikat, Server Hello Done Alert (level: Fatal, Deskripsi: tidak diketahui CA (48)) Bisakah Anda membimbing saya dan membantu saya dalam hal ini?
user3812540
Cara openssl berfungsi adalah mencoba untuk menyelesaikan rantai sertifikat selama verifikasi. Apakah sertifikat server Anda ditandatangani oleh CA intermiate dan bukan CA root. misalnya
Yuvika
Sertifikat saya ditandatangani oleh root CA saja.
user3812540
1
Saya mendapat beberapa kesalahan: - root @ sclrdev: ~ # openssl s_client -connect <server_ip>: 21 -showcerts TERHUBUNG (00000003) 3074050248: kesalahan: 140770FC: rutinitas SSL: SSL23_GET_SERVER_HELLO: protokol tidak diketahui: s23_clnt.c: tidak ada sertifikat rekan yang tersedia --- Tidak ada sertifikat klien CA nama yang dikirim --- Jabat tangan SSL telah membaca 7 byte dan ditulis 225 byte --- Baru, (NONE), Cipher adalah (NONE) Renegosiasi Aman TIDAK didukung Kompresi: Ekspansi NONE: TIDAK ADA --- Saya tidak yakin apa artinya ini?
user3812540
69

Saya telah memecahkan masalah ini dengan menambahkan satu kode baris dalam skrip CURL:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);

Peringatan : Ini membuat permintaan menjadi sangat tidak aman (lihat jawaban oleh @YSU)!

Vijay Bhandari
sumber
42
Ini dapat membantu untuk menghindari masalah. Tapi itu benar-benar ketinggalan ide tentang https dan sistem sertifikasi.
Stephan Richter
1
Bekerja! Baik pintas cepat dan kotor jika Anda tidak peduli dengan sertifikat
Gilly
2
Ini membuatnya benar-benar tidak aman.
Moox
1
Saya menghadapi masalah ini di server lokal saya meskipun kode yang sama berfungsi dengan baik pada staging server. Baik bagi saya seperti di lokal. Terima kasih
sabin
1
tambahkan cek ini untuk memastikan Anda hanya menggunakannya dengan server lokal if( stristr("127.0.0.1",$_SERVER["SERVER_NAME"] ) || stristr("localhost",$_SERVER["SERVER_NAME"] )) curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Hussain
20

Dalam kasus saya itu ternyata menjadi masalah dengan pemasangan sertifikat saya pada layanan yang saya coba konsumsi dengan cURL. Saya gagal menggabungkan / menyatukan sertifikat perantara dan root ke sertifikat domain saya . Pada awalnya tidak jelas bahwa ini adalah masalah karena Chrome berhasil dan menerima sertifikat meskipun mengabaikan sertifikat perantara dan root.

Setelah menggabungkan sertifikat, semuanya berfungsi seperti yang diharapkan. Saya dibundel seperti ini

$ cat intermediate.crt >> domain.crt

Dan diulang untuk semua sertifikat menengah dan root.

Daniel Watrous
sumber
2
Saya memiliki masalah yang sama, kecuali saya tidak memiliki Apache SSLCertificateChainFile saya set ke sertifikat yang benar.
Wayne Piekarski
1
Perhatikan bahwa jika Anda melakukan ini, dan crt yang Anda tambahkan tidak memiliki baris tambahan, maka Anda akan memiliki garis seperti -----END CERTIFICATE----------BEGIN CERTIFICATE-----di bundel Anda, dan Anda akan mendapatkan kesalahan yang tidak jelas:curl: (77) error setting certificate verify locations
Marty Neal
2
Saya menggunakan sertifikat allowencrypt tetapi hanya menyebarkan sertifikat dan kunci pribadi ke server. Chrome dan curl di komputer saya tidak mengeluh, namun aplikasi nodejs yang saya bangun tidak menerima sertifikat. Menyebarkan fullchain ke server memperbaiki masalah! Terima kasih telah menunjukkan arah yang benar!
Paulo Santos
Dalam kasus saya (sertifikat dari comodo), mereka mengirim sertifikat perantara sebagai bundel my-domain.ca. Saya harus menambahkannya ke my-domain.crt. Terima kasih!
Jon Hulka
18

Bagi saya, pemasangan sertifikat yang sederhana membantu:

sudo apt-get install ca-certificates
Maxim Krušina
sumber
2
Misalnya beberapa kontainer buruh pelabuhan kecil mungkin tidak memiliki ini diinstal dan tidak ada gunanya memecahkan masalah lain ketika seluruh paket tidak ada.
muni764
16

Mengalami masalah ini setelah menginstal Git Extensions v3.48. Mencoba menginstal mysysgit lagi tetapi masalah yang sama. Pada akhirnya, harus menonaktifkan (harap pertimbangkan implikasi keamanan!) Dapatkan verifikasi SSL dengan:

git config --global http.sslVerify false

tetapi jika Anda memiliki sertifikat domain lebih baik tambahkan ke (Win7)

C:\Program Files (x86)\Git\bin\curl-ca-bundle.crt
Riga
sumber
23
Bekerja, tetapi terasa seperti menyembunyikan gejalanya, bukan menyembuhkan penyakit.
MonoThreaded
4
Menonaktifkan verifikasi SSL sangat berbahaya
jonasl
1
Anda bisa melakukannya tanpa --globalmenonaktifkan hanya SSL untuk repositori tempat Anda mengalami masalah. Lihat groups.google.com/forum/#!topic/git-for-windows/mlqn5J4OLlw untuk diskusi tentang file crt yang diperlukan saat ini.
koppor
13

Kami mengalami kesalahan ini baru-baru ini. Ternyata itu terkait dengan sertifikat root yang tidak diinstal di direktori toko CA dengan benar. Saya menggunakan perintah curl di mana saya menentukan dir CA secara langsung. curl --cacert /etc/test/server.pem --capath /etc/test ...Perintah ini gagal setiap kali dengan curl: (60) Masalah sertifikat SSL: tidak bisa mendapatkan sertifikat penerbit lokal.

Setelah menggunakan strace curl ..., ditentukan bahwa curl sedang mencari file cert root dengan nama 60ff2731.0, yang didasarkan pada konvensi penamaan hass openssl. Jadi saya menemukan perintah ini untuk secara efektif mengimpor sertifikat root dengan benar:

ln -s rootcert.pem `openssl x509 -hash -noout -in rootcert.pem`.0

yang membuat softlink

60ff2731.0 -> rootcert.pem

Curl, di bawah sampul membaca server.pem cert, menentukan nama file cert root (rootcert.pem), mengubahnya menjadi nama hash, kemudian melakukan pencarian file OS, tetapi tidak dapat menemukannya.

Jadi, takeawaynya adalah, gunakan strace ketika menjalankan curl ketika error curl tidak jelas (sangat membantu), dan kemudian pastikan untuk menginstal root dengan benar menggunakan konvensi penamaan openssl.

gp-coder
sumber
2
Fiuh, itu memang membantu. Untuk menguraikan sedikit apa yang membantu saya: a) menjalankan strace curl ... b) mencari stat yang gagal () dengan sesuatu-hex.0 c) googled untuk sesuatu-hex, temukan cert yang sesuai d) masukkan cert yang ditemukan ke / usr / local / share / ca-sertifikat / (dengan ekstensi * .crt, karena * .pem tidak berfungsi) e) menjalankan pembaruan-ca-sertifikat. Lalu Bingo! - symlink yang diperlukan secara otomatis dibuat di / usr / lib / ssl / certs /
No-Bugs Hare
11

Kemungkinan besar sertifikat hilang dari server.

Root-> Intermediate-> Server

Server harus mengirim Server & Menengah sebagai minimum.

Gunakan openssl s_client -showcerts -starttls ftp -crlf -connect abc:21untuk men-debug masalah.

Jika hanya satu sertifikat yang dikembalikan (ditandatangani sendiri, atau dikeluarkan), maka Anda harus memilih untuk:

  1. perbaiki server
  2. percayai sertifikat itu dan tambahkan ke toko sertifikat CA Anda (bukan ide terbaik)
  3. nonaktifkan kepercayaan, misalnya curl -k(ide yang sangat buruk)

Jika server kembali, lebih dari satu, tetapi tidak termasuk sertifikat yang ditandatangani sendiri (root):

  1. instal sertifikat CA (root) di toko CA Anda untuk rantai ini, mis. google penerbitnya. ( HANYA jika Anda percaya bahwa CA)
  2. perbaiki server untuk mengirim CA sebagai bagian dari rantai
  3. mempercayai sertifikat dalam rantai
  4. nonaktifkan kepercayaan

Jika server mengembalikan sertifikat CA root, maka itu bukan di CA store Anda, opsi Anda adalah:

  1. Tambahkan (percaya) itu
  2. nonaktifkan kepercayaan

Saya telah mengabaikan sertifikat kedaluwarsa / dicabut karena tidak ada pesan yang menunjukkannya. Tetapi Anda dapat memeriksa sertifikat denganopenssl x509 -text

Mengingat Anda terhubung ke edisi rumah ( https://www.cerberusftp.com/support/help/installing-a-certificate/ ) server ftp, saya akan mengatakan itu ditandatangani sendiri.

Silakan kirim lebih detail, seperti output dari openssl.

Jason Pyeron
sumber
6

Menurut dokumen CURL Anda juga dapat meneruskan sertifikat ke curlperintah:

Dapatkan sertifikat CA yang dapat memverifikasi server jarak jauh dan gunakan opsi yang tepat untuk menunjukkan sertifikat CA ini untuk verifikasi saat menghubungkan. Untuk libcurlperetas:curl_easy_setopt(curl, CURLOPT_CAPATH, capath);

Dengan alat baris perintah ikal: --cacert [file]


Sebagai contoh:

curl --cacert mycertificate.cer -v https://www.stackoverflow.com
Giorgos Myrianthous
sumber
5

Mungkin cukup untuk hanya memperbarui daftar sertifikat

sudo update-ca-certificates -f

update-ca-sertifikat adalah program yang memperbarui direktori / etc / ssl / certs untuk memegang sertifikat SSL dan menghasilkan ca-Certificate.crt, daftar sertifikat file tunggal gabungan.

Michael P. Bazos
sumber
melakukannya dan semuanya dilakukan setelah menjalankannya. Tapi ikal tidak berfungsi. masih kesalahan yang sama.
AGamePlayer
1
Saya memang perintahkan, dan itu tidak membantu, dan saya tidak bisa percaya bahwa saya harus melakukan semuanya di atas. Dan kemudian jawaban Anda ... Terima kasih atas bendera '-f'.
Alex Shtromberg
1
Ini adalah solusi yang saya datangi juga. +1
SS Anne
3

Coba instal ulang ikal di Ubuntu, dan perbarui sertifikat CA saya dengan sudo update-ca-certificates --freshyang memperbarui sertifikat

Ankit Singh
sumber
2

Di windows saya mengalami masalah ini. Curl diinstal oleh mysysgit, jadi mengunduh dan menginstal versi terbaru memperbaiki masalah saya.

Kalau tidak, ini adalah instruksi yang layak tentang cara memperbarui sertifikat CA Anda yang dapat Anda coba.

Steve
sumber
2

Ya, Anda juga perlu menambahkan sertifikat CA. Menambahkan potongan kode di Node.js untuk tampilan yang jelas.

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)
Ravi Prakash
sumber
2

Saya juga mengalami masalah ini. Saya telah membaca utas ini dan sebagian besar jawabannya informatif tetapi terlalu rumit bagi saya. Saya tidak berpengalaman dalam topik jaringan jadi jawaban ini untuk orang-orang seperti saya.

Dalam kasus saya, kesalahan ini terjadi karena saya tidak menyertakan sertifikat perantara dan root di sebelah sertifikat yang saya gunakan dalam aplikasi saya.

Inilah yang saya dapatkan dari pemasok sertifikat SSL:

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

Dalam abc.crtfile tersebut, hanya ada satu sertifikat:

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

Jika saya menyediakannya dalam format ini, browser tidak akan menunjukkan kesalahan (Firefox) tetapi saya akan mendapatkan curl: (60) SSL certificate : unable to get local issuer certificatekesalahan ketika saya melakukan permintaan curl.

Untuk memperbaiki kesalahan ini, periksa abc-bunde.crtfile Anda . Anda kemungkinan besar akan melihat sesuatu seperti ini:

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

Ini adalah sertifikat Menengah dan root Anda. Kesalahan terjadi karena tidak ada dalam sertifikat SSL yang Anda berikan ke aplikasi Anda.

Untuk memperbaiki kesalahan, gabungkan konten kedua file ini dalam format ini:

-----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-----

Perhatikan bahwa tidak ada spasi di antara sertifikat, di akhir atau di awal file. Setelah Anda memberikan sertifikat gabungan ini ke aplikasi Anda, masalah Anda harus diperbaiki.

Eorekan
sumber
1

Kasus saya berbeda. Saya hosting situs di belakang firewall. Kesalahan itu disebabkan oleh pfSense.

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

Saya tidak sengaja menemukan penyebabnya, berkat jawaban ini .


Semua baik-baik saja ketika saya mengakses situs saya dari WAN.

Namun, ketika situs diakses dari dalam LAN (misalnya ketika Wordpress membuat curlpermintaan ke server sendiri, meskipun menggunakan IP WAN 49.x.x.x), itu disajikan halaman login pfSense.

Saya mengidentifikasi sertifikat sebagai pfSense webConfigurator Self-Signed Certificate. Tidak heran curlmelemparkan kesalahan.

Penyebab: Apa yang terjadi adalah yang curlmenggunakan alamat IP WAN situs 49.x.x.x. Tapi, dalam konteks server web, IP WAN adalah firewall.

Debug: Saya menemukan bahwa saya mendapatkan sertifikat pfSense.

Solusi: Di server yang menghosting situs, arahkan nama domainnya sendiri ke 127.0.0.1

Dengan menerapkan solusi, curlpermintaan ditangani dengan benar oleh server web, dan tidak diteruskan ke firewall yang merespons dengan mengirimkan halaman login.

PNDA
sumber
0

Ini adalah masalah toko sertifikat ssh. Anda perlu mengunduh file pem sertifikat yang valid dari situs web target CA, dan kemudian membangun file tautan lunak untuk menginstruksikan ssl sertifikat tepercaya.

openssl x509 -hash -noout -in DigiCert_Global_Root_G3.pem

kamu akan mendapatkan dd8e9d41

buat tautan solf dengan nomor hash dan suffix file dengan .0 (dot-zero)

dd8e9d41.0

Lalu coba lagi.

roger
sumber
0
  1. Unduh https://curl.haxx.se/ca/cacert.pem

  2. Setelah mengunduh, pindahkan file ini ke server wamp Anda.

    Untuk exp: D: \ wamp \ bin \ php \

  3. Kemudian tambahkan baris berikut ke file php.ini di bagian bawah.

curl.cainfo = "D: \ wamp \ bin \ php \ cacert.pem"

  1. Sekarang restart server wamp Anda.
sandeep kumar
sumber
0

Anda harus mengubah server cert dari cert.pemke fullchain.pem
Saya memiliki masalah yang sama dengan Perl HTTPS Daemon:
Saya telah mengubah:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/cert.pem'
menjadi:
SSL_cert_file => '/etc/letsencrypt/live/mydomain/fullchain.pem'

k-messaoudi
sumber
-1

Sejauh ini, saya telah melihat masalah ini terjadi dalam jaringan perusahaan karena dua alasan, satu atau keduanya mungkin terjadi dalam kasus Anda:

  1. Karena cara kerja proxy jaringan , mereka memiliki sertifikat SSL sendiri, sehingga mengubah sertifikat yang dilihat oleh curl. Banyak atau sebagian besar jaringan perusahaan memaksa Anda untuk menggunakan proxy ini.
  2. Beberapa program antivirus yang berjalan pada PC klien juga bertindak serupa dengan proksi HTTPS, sehingga mereka dapat memindai lalu lintas jaringan Anda. Program antivirus Anda mungkin memiliki opsi untuk menonaktifkan fungsi ini (dengan asumsi administrator Anda akan mengizinkannya).

Sebagai catatan tambahan, No. 2 di atas mungkin membuat Anda merasa tidak nyaman tentang lalu lintas TLS yang seharusnya aman Anda sedang dipindai. Itulah dunia korporat untuk Anda.

rdguam
sumber
-1

Punya masalah itu dan itu tidak diselesaikan dengan versi yang lebih baru. / etc / certs memiliki cert root, browser mengatakan semuanya baik-baik saja. Setelah beberapa pengujian saya dapatkan dari ssllabs.com peringatan, bahwa rantai saya tidak lengkap (Memang itu rantai untuk sertifikat lama dan bukan yang baru). Setelah memperbaiki rantai sertifikat, semuanya baik-baik saja, bahkan dengan ikal.

jujur
sumber
-1

Saya punya masalah dengan Digicert dari semua CA. Saya membuat file digicertca.pem yang baru saja ditengah dan root disatukan menjadi satu file.

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: */*
...

Eorekan punya jawaban tetapi hanya mendapatkan saya dan satu lagi untuk memilih jawabannya.

Kirt Carson
sumber
-2

Khusus untuk Windowspengguna, menggunakancurl-7.57.0-win64-mingw atau versi serupa.

Ini agak terlambat, dan jawaban yang ada sudah benar. Tetapi saya masih harus berjuang sedikit untuk membuatnya bekerja pada mesin Windows saya, meskipun prosesnya sebenarnya cukup mudah. Jadi, bagikan proses langkah demi langkah.

Kesalahan ini pada dasarnya berarti, curl gagal memverifikasi sertifikat URI target. Jika Anda mempercayai penerbit sertifikat (CA), Anda dapat menambahkannya ke daftar sertifikat tepercaya.

Untuk itu, jelajahi URI (mis. Di Chrome) dan ikuti langkah-langkahnya

  1. Klik kanan pada ikon gembok aman
  2. Klik pada sertifikat, itu akan membuka jendela dengan rincian sertifikat
  3. Buka tab 'Jalur Sertifikasi'
  4. Klik sertifikat ROOT
  5. Klik Lihat Sertifikat, itu akan membuka jendela sertifikat lain
  6. Buka tab Detail
  7. Klik Salin ke File, itu akan membuka panduan ekspor
  8. Klik Selanjutnya
  9. Pilih 'Base-64 encoded X.509 (.CER)'
  10. Klik Selanjutnya
  11. Berikan nama yang ramah misalnya 'MyDomainX.cer' (browse ke direktori yang diinginkan)
  12. Klik Selanjutnya
  13. Klik Selesai, itu akan menyimpan file sertifikat
  14. Sekarang buka .cerfile ini dan salin isinya (termasuk ----- BEGIN CERTIFICATE ----- dan ----- END CERTIFICATE -----)
  15. Sekarang pergi ke direktori tempat curl.exedisimpan misC:\SomeFolder\curl-7.57.0-win64-mingw\bin
  16. Buka curl-ca-bundle.crt file dengan editor teks
  17. Tambahkan teks sertifikat yang disalin ke akhir file. Menyimpan

Sekarang perintah Anda harus dijalankan dengan baik di curl.

Arghya C
sumber
3
Beberapa komentar tentang alasan downvote akan dihargai
Arghya C
Saya tidak menemukan file bernama "curl-ca-bundle.crt" di "C: \ xampp \ apache \ bin" (windows). Tebak suara turun karena ini. Saya punya "curl.exe" di folder "bin" yang disebutkan di atas
kathikeyan A
-4

ini dapat membantu Anda untuk membuang waktu:

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

diuji pada guzzle / guzzle 3. *

fico7489
sumber
-5

Solusi sederhana: IN ~/.sdkman/etc/config, ubahsdkman_insecure_ssl=true

Langkah-langkah:
nano ~/.sdkman/etc/config
ubah sdkman_insecure_ssl=falseuntuk sdkman_insecure_ssl=true
menyimpan dan keluar

Biniam
sumber