Как использовать curl для вызова безопасной (https) службы WCF - только запрос GET - PullRequest
0 голосов
/ 02 мая 2018

В контексте я создал службу WCF, размещенную в IIS с использованием https.

У меня нет проблем с самой службой WCF, она работает как надо; Я могу перейти на страницу сервиса по адресу https://myhost/VirtualAppOnIIS/Some/WCF/Service/Here/V1 используя браузер (в моем случае IE).

Символ «замок» отображается нормально, и я могу просмотреть информацию о сертификате; Более подробная информация о сертификате:

  • корневым центром сертификации является Verisign, выдавший сертификат Verisign Intermediate, выдавший сертификат моего сервера (назовем его "myhost")
  • «Использование ключа» установлено как критическое, цели: Цифровая подпись, Неотказность, Шифрование ключа, Шифрование данных (f0)
  • «Расширенное использование ключа» отсутствует, поэтому я могу заключить, что оно не определено / не установлено издателем сертификата (и, следовательно, этот сертификат может использоваться как в качестве сертификата сервера, так и сертификата клиента)

Пока все хорошо. Моя настоящая проблема заключается в том, как заставить curl сделать запрос / GET https (аналогично тому, как это делает браузер).

Попытка № 1.

curl --tlsv1.2 https://myhost/VirtualAppOnIIS/Some/WCF/Service/Here/V1 -v

*   Trying 192.168.1.114...
* TCP_NODELAY set
* Connected to myhost (192.168.1.114) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: C:\SETUPS\curl\curl-ca-bundle.crt   CApath: none
* TLSv1.2 (OUT), TLS header, Certificate Status (22):
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (OUT), TLS alert, Server hello (2):
* SSL certificate problem: unsupported certificate purpose
* stopped the pause stream!
* Closing connection 0
* TLSv1.2 (OUT), TLS alert, Client hello (1): curl: (60) SSL certificate problem: unsupported certificate purpose 
More details here: https://curl.haxx.se/docs/sslcerts.html 
...etc ... 
If you'd like to turn off curl's verification of the certificate, use  the -k (or --insecure) option.

Мы можем увидеть ошибку после сервера hello (2):

Проблема с сертификатом SSL: неподдерживаемое назначение сертификата

Я убедился, что у меня есть оба сертификата для Intermediate и Root CA, соединенных в файле curl-ca-bundle.crt (и ничего больше), который curl находит по умолчанию, и я не верю, что это проблема проверки цепочки, Кажется, проблема с определенным назначением, как указано в сообщении об ошибке.

Попытка # 2

Проверка Bybass https в соответствии с выводом curl с использованием ключа -k. Да, работает!

curl --tlsv1.2 https://myhost/VirtualAppOnIIS/Some/WCF/Service/Here/V1 -v -k

* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-SHA384
* ALPN, server did not agree to a protocol
* Server certificate:
*  subject: C=country; ST=state; O=Some Company PTY LIMITED; CN=myhost
*  start date: Apr 26 00:00:00 2017 GMT
*  expire date: Mar 29 23:59:59 2019 GMT
*  issuer: O=VeriSign; OU=Whatever PKI; CN=Whatever Intermediate CA
*  SSL certificate verify result: unable to get local issuer certificate (20), continuing anyway.
 GET /VirtualAppOnIIS/Some/WCF/Service/Here/V1 HTTP/1.1
 Host: myhost
 User-Agent: curl/7.53.1
 Accept: */*

 HTTP/1.1 200 OK
 Cache-Control: private
 Content-Type: text/html; charset=UTF-8
 Server: Microsoft-IIS/8.5
 Set-Cookie: ASP.NET_SessionId=iy1s4q1hwkncywi5m0w0coch; path=/; HttpOnly
 X-AspNet-Version: 4.0.30319
 X-Powered-By: ASP.NET
 Date: Wed, 02 May 2018 07:08:30 GMT
 Content-Length: 3236

<HTML><HEAD>
etc... etc... more html for wcf service page... etc ... etc...
</BODY></HTML>
 Connection #0 to host myhost left intact

Так что перефразируй вопрос, если это сертификат. цель вопроса (как предложено в попытке № 1), какой сертификат. Цели или настройки или конфигурации требуются (при выдаче сертификата), чтобы заставить работать curl и WCF с TLS?

Кстати, я использую curl в Windows с https://winampplugins.co.uk/curl/

...