web-dev-qa-db-fra.com

Correction de l'erreur SSL CURL (51): aucun autre nom d'objet de certificat ne correspond

Je suis nouveau dans le monde CURL, venant de Windows + .NET domain.

Essayer d'accéder à Rest API pour l'authentification de base à l'adresse http://www.evercam.io/docs/api/v1/authentication .

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

Je ne sais pas comment utiliser cette commande sur la commande windows Invite après la configuration de CURL. CURL testé comme suit:

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

Maintenant je termine avec ça

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'

Comment puis-je réparer cette erreur de problème SSL 51?

50
theGeekster

Cela se produit généralement lorsque le certificat ne correspond pas au nom d'hôte.

La solution serait de contacter l'hôte et de lui demander de réparer son certificat.
Sinon, vous pouvez désactiver la vérification du certificat par cURL, utilisez le -k (ou --insecure) option.
Veuillez noter que, comme le dit l'option, il est peu sûr . Vous ne devez pas utiliser cette option en production car elle autorise les certificats auto-signés.

Plus peut être trouvé ici: http://curl.haxx.se/docs/sslcerts.html

76
Sabuj Hassan

Je sais que c'est une question (très) ancienne et qu'elle concerne la ligne de commande, mais lorsque j'ai cherché dans Google "SSL: aucun nom de sujet de certificat alternatif ne correspond au nom d'hôte cible", ce fut le premier succès.

Il m'a fallu un bon moment pour trouver la réponse, alors espérons que cela fera gagner un temps précieux à quelqu'un! Dans PHP ajoutez ceci à vos paramètres cUrl:

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

p.s: cela devrait être une solution temporaire. Comme il s’agit d’une erreur de certificat, la meilleure chose à faire est de bien sûr fixer le certificat!

61
JD_N_PHP

Le nom commun dans le certificat pour api.evercam.io est pour *.herokuapp.com et le certificat ne contient aucun autre nom de sujet. Cela signifie que le certificat pour api.evercam.io ne correspond pas au nom d'hôte et par conséquent, la vérification du certificat échoue. Même chose que pour www.evercam.io, par exemple. essayez https://www.evercam.io avec un navigateur et vous obtenez le message d'erreur indiquant que le nom figurant dans le certificat ne correspond pas au nom d'hôte.

C'est donc un problème qui doit être résolu par evercam.io. Si vous ne vous souciez pas de la sécurité, des attaques de type "man-in-the-middle", vous pouvez désactiver la vérification du certificat (curl --insecure), mais vous devriez alors vous demander pourquoi vous utilisez https au lieu de http.

20
Steffen Ullrich

cela pourrait faire gagner du temps à quelqu'un.

Si vous utilisez GuzzleHttp et que vous faites face à ce message d'erreur erreur cURL 60: SSL: aucun autre nom de sujet de certificat ne correspond au nom d'hôte cible et que la solution "non sécurisée" vous convient (non recommandé en production), vous devez ajouter \GuzzleHttp\RequestOptions::VERIFY => false à la configuration du client:

$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,
]);

qui définit CURLOPT_SSL_VERIFYHOST sur 0 et CURLOPT_SSL_VERIFYPEER sur false dans la méthode CurlFactory::applyHandlerOptions()

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

De la documentation de GuzzleHttp

vérifier

Décrit le comportement de vérification du certificat SSL d'une demande.

  • Définissez sur true pour activer la vérification du certificat SSL et utilisez le groupe d'autorités de certification par défaut> fourni par le système d'exploitation.
  • Définissez la valeur sur false pour désactiver la vérification du certificat (ce n'est pas sûr!).
  • Définissez une chaîne pour fournir le chemin d'accès à un ensemble d'autorités de certification afin de permettre la vérification à l'aide d'un certificat personnalisé.
1
Zoltán Süle

Comme l'indique le code d'erreur, "aucun nom de sujet de certificat alternatif ne correspond au nom d'hôte cible". Il existe donc un problème avec le certificat SSL.

Le certificat doit inclure SAN et seul SAN sera utilisé. Certains navigateurs ignorent le nom commun obsolète.

La RFC 2818 indique clairement "Si une extension subjectAltName de type dNSName est présente, celle-ci DOIT être utilisée comme identité. Sinon, le champ Nom commun (le plus spécifique) dans le champ Objet du certificat DOIT être utilisé. Le nom est une pratique existante, il est déconseillé et les autorités de certification sont encouragées à utiliser le nom de nom de fichier (DNSName). "

0
povlhp

J'ai eu le même problème. Dans mon cas, j'utilisais digitalocean et nginx.
J'ai d’abord configuré un domaine example.app et un sous-domaine dev.exemple.app dans digitalocean. Deuxièmement, j’ai acheté deux certificats ssl auprès de GoDaddy. Et enfin, j’ai configuré deux domaines dans nginx pour utiliser ces deux certificats ssl avec le snipet suivant

Ma configuration de domaine example.app

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

Mon 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;
    }
 }

Quand je lancais https://dev.echantillonnage.app , je devenais

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

Mon erreur a été les deux lignes ci-dessous

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

J'ai dû changer ceci en:

     listen 443 ssl;
     listen [::]:443 ssl;
0
onlyme