В контексте я создал службу 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/