https-verbinding met CURL vanaf de opdrachtregel

Ik ben nieuw in de wereld van Curl en Cacert en heb een probleem bij het verbinden met een server.
Kortom, ik moet de connectiviteit via https van de ene machine naar de andere machine testen.
Ik heb een URL waarmee ik verbinding moet maken vanaf machine A (een linux-machine)
Ik heb dit geprobeerd op de opdrachtprompt

cmd> curl https://[my domain or IP address]

en kreeg het volgende:

curl: (60) SSL certificate problem, verify that the CA cert is OK. Details:
error:14090086:SSL routines:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed

Bij het doornemen van enkele artikelen op internet deed ik dit:

openssl s_client -connect <domain name or Ip address>:443

en kreeg een aantal reacties, waaronder de
servercertificaat (binnen -----BEGIN CERTIFICATE----- and -----END CERTIFICATE-----).

Wat moet ik vanaf hier doen. Ik denk dat ik de tekst erin moet kopiëren en plakken
BEGIN CERTIFICATE & END CERTIFICATEen sla het op in een bestand.
Maar,
Welk type bestand moet het zijn? .pem, .crt?..
Wat moet ik daarna doen?

Ik heb dit geprobeerd – de tekst in BEGIN CERTIFICATE & END CERTIFICATEen opgeslagen in een .crt-bestand – noemde het als my-ca.crt(ook hetzelfde geprobeerd door het te noemen als my-ca.pembestand)
en deed toen dit:

cmd>curl --cacert my-ca.crt https://[my domain or IP address]

Maar kreeg dezelfde fout.


Antwoord 1, autoriteit 100%

Ik had hetzelfde probleem – ik was een pagina aan het ophalen van mijn eigen site, die werd aangeboden via HTTPS, maar curl gaf dezelfde melding “SSL-certificaatprobleem”. Ik heb er omheen gewerkt door een -k-vlag aan de oproep toe te voegen om onveilige verbindingen toe te staan.

curl -k https://whatever.com/script.php

Bewerken: ik heb de oorzaak van het probleem ontdekt. Ik gebruikte een SSL-certificaat (van StartSSL, maar ik denk niet dat dat veel uitmaakt) en had het tussencertificaat niet goed ingesteld. Als je hetzelfde probleem hebt als gebruiker1270392 hierboven, is het waarschijnlijk een goed idee om je SSL-certificaat te testenen op te lossen eventuele problemen ermee voordat u uw toevlucht neemt tot de curl -k-oplossing.


Antwoord 2, autoriteit 34%

Eenvoudige oplossing

Dat is mijn dagelijkse script:

curl --insecure -v https://www.google.com 2>&1 | awk 'BEGIN { cert=0 } /^\* Server certificate:/ { cert=1 } /^\*/ { if (cert) print }'

Uitvoer:

* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=www.google.com
*    start date: 2016-01-07 11:34:33 GMT
*    expire date: 2016-04-06 00:00:00 GMT
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
* Server GFE/2.0 is not blacklisted
* Connection #0 to host www.google.com left intact

Antwoord 3, autoriteit 22%

U moet de hele certificaatketen voor curl leveren, aangezien curl niet langer wordt geleverd met CA-certificaten. Aangezien de cacert-optie slechts één bestand kan gebruiken, moet u de volledige keteninformatie in 1 bestand samenvoegen

Kopieer de certificaatketen (bijvoorbeeld vanuit uw browser) naar DER-gecodeerde binaire x.509(.cer). Doe dit voor elk certificaat.

Converteer de certificaten naar PEM en voeg ze samen tot 1 bestand.

openssl x509 -inform DES -in file1.cer -out file1.pem -text
openssl x509 -inform DES -in file2.cer -out file2.pem -text
openssl x509 -inform DES -in file3.cer -out file3.pem -text
cat *.pem > certRepo
curl --cacert certRepo -u user:passwd -X GET -H 'Content-Type: application/json' "https//somesecureserver.com/rest/field"

Ik heb hier een blog geschreven over hoe je dit kunt doen: http://javamemento.blogspot.no/2015/10/using-curl-with-ssl-cert-chain.html


Antwoord 4, autoriteit 13%

gebruik --cacertom een .crt-bestand op te geven.
ca-root-nss.crtbijvoorbeeld.


Antwoord 5, autoriteit 4%

Ik had eigenlijk zo’n probleem en ik los het als volgt op:

  1. Verkrijg de bundel met root-CA-certificaten hier: https://curl.haxx .se/ca/cacert.pemen sla het op lokaal

  2. Zoek het bestand php.ini

  3. Stel de curl.cainfoin als het pad van de certificaten. Dus het zal zoiets zijn als:

curl.cainfo = /path/of/the/keys/cacert.pem


Antwoord 6, autoriteit 3%

Hier kunt u de CA-certificaten vinden met instructies om Mozilla CA-certificaten te downloaden en te converteren.
Zodra u ca-bundle.crtof cacert.pemheeft ontvangen, gebruikt u gewoon:

curl.exe --cacert cacert.pem https://www.google.com

of

curl.exe --cacert ca-bundle.crt https://www.google.com

Antwoord 7

het probleem hebben gediagnosticeerd
Ik kon het bestaande standaard CA-bestand van het systeem gebruiken, op debian6 is dit:

/etc/ssl/certs/ca-certificates.crt

als root kan dit als volgt worden gedaan:

echo curl.cainfo=/etc/ssl/certs/ca-certificates.crt >> /etc/php5/mods-available/curl.ini

start vervolgens de webserver opnieuw.


Antwoord 8

je zou dit kunnen gebruiken

curl_setopt($curl->curl, CURLOPT_SSL_VERIFYPEER, false);


Antwoord 9

Voor mij wilde ik gewoon een website testen met een automatische http->https-omleiding. Ik denk dat ik al een aantal certificaten had geïnstalleerd, dus dit werkt alleen voor mij op Ubuntu 16.04 met curl 7.47.0 (x86_64-pc-linux-gnu) libcurl/7.47.0 GnuTLS/3.4.10 zlib/1.2.8 libidn/1.32 librtmp/2.3

curl --proto-default https <target>


Antwoord 10

Je hebt de certificatenketen nodig en geen enkel certificaat.
Het is gemakkelijk te verkrijgen met Firefox:

  1. Open de url in Firefox.
  2. Klik op het beveiligingspictogram in het adresvak links van de url.
  3. Klik op connection not secure, more information. Selecteer op het tabblad securityview certificateen blader naar het einde. Selecteer naast downloadde PEM(chain)om de keten van certificaten te downloaden.

Nu heb je de keten van certificaten als een bestand dat je kunt gebruiken in het curl-verzoek na de vlag --cacert:
curl --cacert downloaded.pem -X POST https://the-url-to-access


Antwoord 11

Met moderne versies van curl kun je eenvoudig het IP-adres wijzigen waarmee je verbinding wilt maken, met –resolve of –connect-to (curl nieuwer dan versie 7.49). Dit werkt zelfs met SSL/SNI. Alle details staan in de man-pagina.

Bijvoorbeeld om DNS te overschrijven en verbinding te maken met www.example.com met ssl met een bepaald ip-adres: (Dit overschrijft ook ipv6)

curl --resolve www.example.com:443:192.168.42.2 https://www.example.com/

Een ander voorbeeld, om verbinding te maken met een bepaalde backend-server genaamd backend1 op poort 8080

curl --connect-to www.example.com:80:backend1.example.com:8080 http://www.example.com/

Vergeet niet om de host-header toe te voegen als de server die nodig heeft om correct te antwoorden:

-H 'Host:www.example.com' 

Other episodes