Curl: Düzeltme CURL (51) SSL hatası: alternatif sertifika konu adı eşleşmiyor


88

Windows + .NET etki alanından gelen CURL dünyasında yeniyim.

Http://www.evercam.io/docs/api/v1/authentication adresinden temel kimlik doğrulama için Rest API'ye erişmeye çalışılıyor .

curl -X GET https://api.evercam.io/v1/... \
-u {username}

CURL kurulumunu başarıyla yaptıktan sonra bu komutu Windows komut isteminde nasıl kullanacağınızı bilmiyorum. CURL şu şekilde test edilmiştir:

C:\>curl --version
curl 7.33.0 (x86_64-pc-win32) libcurl/7.33.0 OpenSSL/0.9.8y zlib/1.2.8 libssh2/1.4.3
Protocols: dict file ftp ftps gopher http https imap imaps pop3 pop3s rtsp scp s
ftp smtp smtps telnet tftp
Features: AsynchDNS GSS-Negotiate Largefile NTLM SSL SSPI libz

Şimdi bununla bitiriyorum

C:\>curl -u myuser:mypassword -X GET https://api.evercam.io/v1/
curl: (51) SSL: no alternative certificate subject name matches target host name 'api.evercam.io'

Bu SSL sorunu 51 hatasını nasıl düzeltebilirim?

Yanıtlar:


113

Genellikle sertifika ana bilgisayar adıyla eşleşmediğinde olur.

Çözüm, ana bilgisayarla iletişim kurmak ve sertifikasını düzeltmesini istemektir.
Aksi takdirde, cURL'nin sertifika doğrulamasını kapatabilirsiniz, -k(veya --insecure) seçeneğini kullanın.
Lütfen seçeneğin dediği gibi güvensiz olduğunu unutmayın . Bu seçeneği kullanmamalısınız çünkü ortadaki adam saldırılarına izin verir ve HTTPS'nin amacını bozar.

Daha fazlası burada bulunabilir: http://curl.haxx.se/docs/sslcerts.html


10
Kontrolü kapatmayı söyleyen cevaplar, sonuçların ne olduğunu da vurgulamalıdır. Bu tehlikeli!
DrP3pp3r

1
Anladığım şey, sertifika üzerindeki konu adı için *.my-domain.comgeçerli değildi dev.subdomain.my-domain.com. Ama iyi çalışıyor dev-subdomain.my-domain.com. Dolayısıyla, birden fazla alt alanın çalışmasını sağlamak için belki bu makalenin söylediklerine ihtiyacınız var - sslshopper.com/…
duaagupd

77

Editörün notu: PHP'nin kullanacak kadar eski bir sürümünü kullanıyorsanız, bu çok tehlikeli bir yaklaşımdır. Kodunuzu ortadaki adam saldırılarına açar ve şifreli bir bağlantının birincil amaçlarından birini kaldırır. Bunu yapma yeteneği PHP'nin modern sürümlerinden kaldırılmıştır çünkü çok tehlikeli. Bunun 70 kez yükseltilmesinin tek nedeni, insanların tembel olmasıdır. BUNU YAPMA.


Bunun (çok) eski bir soru olduğunu ve komut satırıyla ilgili olduğunu biliyorum, ancak Google'da "SSL: alternatif sertifika konu adı hedef ana bilgisayar adıyla eşleşmiyor" ifadesini aradığımda, bu ilk isabet oldu.

Cevabı bulmam biraz zaman aldı, bu yüzden umarım bu birisine çok zaman kazandırır! PHP'de bunu cUrl setoplarınıza ekleyin:

curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

ps: bu geçici bir çözüm olmalıdır. Bu bir sertifika hatası olduğundan, en iyisi sertifikanın düzeltilmesini sağlamaktır!


30
Bu, PHP'de yaşadığım problem için google aramamda ortaya çıktı, bu yüzden bu benim için yararlı oldu.
Gujamin

1
Ben de aynı aramayı yaptım ve cevabınızı burada bulduğuma sevindim. Teşekkürler!
CptMisery

2
CURLOPT_SSL_VERIFYHOSTbenim durumumda yeterliydi
1234ru

Henüz sertifikalarınızı almadıysanız, test amacıyla yararlıdır.
Andrew

20

Sertifikadaki ortak isim api.evercam.ioiçindir *.herokuapp.comve sertifikada alternatif konu adı yoktur. Bu, sertifikasının api.evercam.ioana bilgisayar adıyla eşleşmediği ve bu nedenle sertifika doğrulamasının başarısız olduğu anlamına gelir . Aynı şekilde www.evercam.io, örneğin bir tarayıcıyla https: //www.evercam.io'yu deneyin ve sertifikadaki adın ana bilgisayar adıyla eşleşmediğini belirten bir hata mesajı alırsınız.

Bu nedenle, evercam.io tarafından düzeltilmesi gereken bir sorundur. Güvenlik, ortadaki adam saldırıları vb. Umurunuzda değilse, sertifikanın ( curl --insecure) doğrulanmasını devre dışı bırakabilirsiniz , ancak daha sonra neden http yerine https kullandığınızı kendinize sormalısınız.


4

birisine biraz zaman kazandırabilir.

Eğer kullanırsanız GuzzleHttp ve bu hata mesajı ile karşı karşıya cURL hatası 60: SSL: alternatif sertifika konu adı hedef ana bilgisayar adıyla eşleşen ardından eklemek varsa ve (üretim önerilmez) 'güvensiz' solüsyon ile gayet \GuzzleHttp\RequestOptions::VERIFY => falsemüşteriye konfigürasyon:

$this->client = new \GuzzleHttp\Client([
    'base_uri'                          => 'someAccessPoint',
    \GuzzleHttp\RequestOptions::HEADERS => [
        'User-Agent' => 'some-special-agent',
    ],
    'defaults'                          => [
        \GuzzleHttp\RequestOptions::CONNECT_TIMEOUT => 5,
        \GuzzleHttp\RequestOptions::ALLOW_REDIRECTS => true,
    ],
    \GuzzleHttp\RequestOptions::VERIFY  => false,
]);

bu set CURLOPT_SSL_VERIFYHOST, 0 ve CURLOPT_SSL_VERIFYPEERyanlış için CurlFactory::applyHandlerOptions()yöntem

$conf[CURLOPT_SSL_VERIFYHOST] = 0;
$conf[CURLOPT_SSL_VERIFYPEER] = false;

Gönderen GuzzleHttp belgelerinde

Doğrulayın

Bir isteğin SSL sertifikası doğrulama davranışını açıklar.

  • SSL sertifika doğrulamasını etkinleştirmek ve işletim sistemi tarafından sağlanan varsayılan CA paketini> kullanmak için doğru olarak ayarlayın.
  • Sertifika doğrulamayı devre dışı bırakmak için yanlış olarak ayarlayın (bu güvenli değildir!).
  • Özel bir sertifika kullanarak doğrulamayı etkinleştirmek için bir CA paketine giden yolu sağlamak için bir dizeye ayarlayın.

0

Hata kodunun dediği gibi, "alternatif sertifika konu adı hedef ana bilgisayar adıyla eşleşmez" - bu nedenle SSL sertifikasıyla ilgili bir sorun vardır.

Sertifika SAN içermelidir ve yalnızca SAN kullanılacaktır. Bazı tarayıcılar, kullanımdan kaldırılan Ortak Adı görmezden gelir.

RFC 2818, "dNSName türünde bir subjectAltName uzantısı varsa, kimlik olarak kullanılması ZORUNLUDUR. Aksi takdirde, sertifikanın Konu alanındaki (en spesifik) Ortak Ad alanı KULLANILMALIDIR. Ad mevcut bir uygulamadır, kullanımdan kaldırılmıştır ve Sertifika Yetkililerinin bunun yerine dNSName'i kullanmaları önerilir. "


0

Ben de aynı sorunu yaşadım. Benim durumumda digitalocean ve nginx kullanıyordum.
Önce digitalocean'da example.app alan adı ve dev.exemple.app alt alan adı kurdum. İkincisi, godaddy'den iki SSL sertifikası satın aldım. Ve son olarak, nginx'te bu iki SSL sertifikasını aşağıdaki kod parçacığı ile kullanacak şekilde yapılandırdım

Example.app etki alanı yapılandırmam

    server {
    listen 7000 default_server;
    listen [::]:7000 default_server;

     listen 443 ssl default_server;
     listen [::]:443 ssl default_server;

    root /srv/nodejs/echantillonnage1;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name echantillonnage.app;
    ssl_certificate /srv/nodejs/certificatSsl/widcardcertificate/echantillonnage.app.chained.crt;
    ssl_certificate_key /srv/nodejs/certificatSsl/widcardcertificate/echantillonnage.app.key;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            proxy_pass http://127.0.0.1:8090;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    #try_files $uri $uri/ =404;
    }
 }

Dev.example.app

   server {
    listen 7000 default_server;
    listen [::]:7000 default_server;

     listen 444 ssl default_server;
     listen [::]:444 ssl default_server;

    root /srv/nodejs/echantillonnage1;

    # Add index.php to the list if you are using PHP
    index index.html index.htm index.nginx-debian.html;

    server_name dev.echantillonnage.app;
    ssl_certificate /srv/nodejs/certificatSsl/dev/dev.echantillonnage.app.chained.crt;
    ssl_certificate_key /srv/nodejs/certificatSsl/dev/dev.echantillonnage.app.key;

    location / {
            # First attempt to serve request as file, then
            # as directory, then fall back to displaying a 404.
            proxy_pass http://127.0.0.1:8091;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
    #try_files $uri $uri/ =404;
    }
 }

Ben başlatılması zaman https://dev.echantillonnage.app , ben başlamıştı

    Fix CURL (51) SSL error: no alternative certificate subject name matches

Benim hatam aşağıdaki iki satırdı

    listen 444 ssl default_server;
     listen [::]:444 ssl default_server;

Bunu şu şekilde değiştirmek zorunda kaldım:

     listen 443 ssl;
     listen [::]:443 ssl;
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.