web-dev-qa-db-fra.com

Curl renvoie "Protocole inconnu"

Même s'il y a beaucoup de résultats sur Google, aucun ne semble donner de réponse. J'ai une boîte Debian où je fais ceci:

# curl https://localhost/api/v1/status --verbose
* About to connect() to localhost port 443 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol
* Closing connection #0
curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

Je ne peux pas passer le protocole inconnu. J'ai essayé -ssl -sslv3 mais ils ne me mènent nulle part. En fait, -sslv3 me donne des résultats légèrement différents:

s# curl https://localhost/api/v1/status --verbose -sslv3
* About to connect() to localhost port 443 (#0)
*   Trying ::1...
* connected
* Connected to localhost (::1) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS alert, Server hello (2):
* error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number
* Closing connection #0

Mon virtualhost est configuré comme suit (fragment):

    SSLEngine on
    SSLProtocol all -SSLv2
    SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM

    SSLCertificateFile    /etc/Apache2/ssl.key/xxx/ssl.cert
    SSLCertificateKeyFile /etc/Apache2/ssl.key/xxx/xxx.xxx.key

    #   Server Certificate Chain:
    SSLCertificateChainFile /etc/Apache2/ssl.key/sub.class1.server.ca.pem

    #   Certificate Authority (CA):
    SSLCACertificateFile /etc/Apache2/ssl.key/ca.pem

    <FilesMatch "\.(cgi|shtml|phtml|php)$">
            SSLOptions +StdEnvVars
    </FilesMatch>
    <Directory /usr/lib/cgi-bin>
            SSLOptions +StdEnvVars
    </Directory>
    BrowserMatch "MSIE [2-6]" \
            nokeepalive ssl-unclean-shutdown \
            downgrade-1.0 force-response-1.0
    # MSIE 7 and newer should be able to use keepalive
    BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown

Toute aide serait très appréciée.

edit: Update Je pense avoir trouvé mon propre problème!

L'hôte virtuel était lié à l'interface externe et curl essayait de se connecter via localhost. Il ne s'est donc jamais retrouvé sur l'hôte virtuel configuré.

Pour résoudre ce problème, j'ai créé une nouvelle entrée VirtualHost liée à 127.0.0.1:80 qui autorise uniquement les connexions depuis localhost. Pour mes besoins, cela suffit.

15
Coo

Bien que ce ne soit pas le cas de l'OP, l'erreur "Protocole inconnu" dans cURL apparaît lorsque vous essayez accidentellement d'appeler un serveur HTTP à l'aide de HTTPS, généralement pendant le développement local.
Je le mentionne juste au cas où quelqu'un googlerait cette erreur et atterrirait ici.

curl: (35) error:140770FC:SSL routines:SSL23_GET_SERVER_HELLO:unknown protocol

36
Elad

J'ai également eu ce problème avec curl, et il s'est avéré que j'avais un problème avec mes variables d'environnement.

Normalement, vous pouvez spécifier le proxy à l'aide de http_proxy et https_proxy variables d'environnement, mais j'utilisais accidentellement la mauvaise valeur pour https_proxy.

Dans mon cas, j'avais:

http_proxy=http://a.b.c.d:3128/
https_proxy=https://a.b.c.d:3128/

C'était faux, car (dans mon cas au moins) le https_proxy ne doit pas utiliser le protocole HTTPS, il doit être le même que le http_proxy. Une fois que j'ai défini les deux variables d'environnement proxy pour utiliser uniquement http://a.b.c.d:3128/ tout a encore fonctionné.

Donc, si cela aide les autres, essayez:

http_proxy=http://a.b.c.d:3128/
https_proxy=http://a.b.c.d:3128/ # NOT HTTPS
13
dreamlax

Aussi une réponse ici: node-request - Obtention de l'erreur "SSL23_GET_SERVER_HELLO: protocole inconnu"

Votre serveur utilise SSLv2 obsolète ... vous pouvez essayer ceci comme il est dans les pages de manuel:

curl https://localhost/api/v1/status --verbose --sslv2
6
PSeUdocode