Мне дали проект .NET Core для запуска в контейнере Docker Linux, чтобы выполнить сборку, кажется, все хорошо на стороне конфигурации докера, но когда я запускаю эту команду: dotnet publish -c Release -o out
, я получаю аутентификацию SSLошибка ниже.
The SSL connection could not be established, see inner exception.
Authentication failed because the remote party has closed the transport stream.
Я провел исследование и, по-видимому, мне показалось, что мне не хватает:
1) переменных среды Kestrel для ASPNET (согласно https://github.com/aspnet/AspNetCore.Docs/issues/6199),, который я добавляю к своему docker-compose
, но я не думаю, что это проблема.
2) сертификат разработчика .pfx, поэтому я обновил свой docker-compose
путем Kestrel Path кфайл сертификатов, как показано ниже.
version: '3'
services:
netcore:
container_name: test_alerting_comp
tty: true
stdin_open: true
image: alerting_netcore
environment:
- http_proxy=http://someproxy:8080
- https_proxy=http://someproxy:8080
- ASPNETCORE_ENVIRONMENT=Development
- ASPNETCORE_URLS=https://+;http://+
- ASPNETCORE_HTTPS_PORT=443
- ASPNETCORE_Kestrel__Certificates__Default__Password="ABC"
- ASPNETCORE_Kestrel__Certificates__Default__Path=/root/.dotnet/corefx/cryptography/x509stores/my
ports:
- "8080:80"
- "443:443"
build: .
#context: .
security_opt:
- seccomp:unconfined
volumes:
- "c:/FakePath/git/my_project/src:/app"
- "c:/TEMP/nuget:/root"
networks:
- net
networks:
net:
Я перезапустил Docker-контейнер и выполнил dotnet publish -c Release -o out
с теми же результатами.
С моего хоста я могу сделать это с моим локальным NuGet:
A) wget https://nuget.local.com/api/v2
без проблем,
B) но из контейнера я не могу.
C) Однако из контейнера я могу сделать это с официальным NuGet wget https://api.nuget.org/v3/index.json
, поэтому, безусловно, мой прокси работает нормально.
Отладка вопроса SSL:
Указано.Сертификат pfx является самозаверяющим и работает нормально с ОС Windows (по крайней мере, мне об этом сказали).
1) strace
показывает мне, откуда вытащены сертификаты, как показано ниже
root@9b98d5447904:/app# strace wget https://nuget.local.com/api/v2 |& grep certs
open("/etc/ssl/certs/ca-certificates.crt", O_RDONLY) = 3
2) Я экспортировал .pfx следующим образом: openssl pkcs12 -in ADPRootCertificate.pfx -out my_adp_dev.crt
затем переместил его в /usr/local/share/ca-certificates/
, удалил приватную часть, просто оставил в публичной части файла (* 1043)*) выполнил update-ca-certificates
, и я смог увидеть 1 added
, дважды проверил в файле /etc/ssl/certs/ca-certificates.crt
и новый сертификат был там.
3) Снова выполнил wget https://nuget.local.com/api/v2
и не удалось.
4) Я использовал OpenSSL, чтобы получить больше информации, и, как вы можете видеть, он не работает, у сертификата странный CN, потому чтоони использовали подстановочный знак для субъекта, и для меня это неправильно, но они утверждают, что .pfx работает в ОС Windows.
root@ce21098e9643:/usr/local/share/ca-certificates# openssl s_client -connect nuget.local.com:443 -CApath /etc/ssl/certs
CONNECTED(00000003)
depth=0 CN = *.local.com
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = *.local.com
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:/CN=\x00*\x00l\x00o\x00c\x00a\x00l\x00.\x00c\x00o\x00m
i:/C=ES/ST=SomeCity/L=SomeCity/OU=DEV/O=ASD/CN=Development CA
---
Server certificate
-----BEGIN CERTIFICATE-----
XXXXXXXXXXX
XXXXXXXXXXX
-----END CERTIFICATE-----
subject=s:/CN=\x00*\x00l\x00o\x00c\x00a\x00l\x00.\x00c\x00o\x00m
issuer=i:/C=ES/ST=SomeCity/L=SomeCity/OU=DEV/O=ASD/CN=Development CA
---
No client certificate CA names sent
Peer signing digest: SHA1
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 1284 bytes and written 358 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.2, Cipher is ECDHE-RSA-AES256-SHA384
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES256-SHA384
Session-ID: 95410000753146AAE1D313E8538972244C7B79A60DAF3AA14206417490E703F3
Session-ID-ctx:
Master-Key: B09214XXXXXXX0007D126D24D306BB763673EC52XXXXXXB153D310B22C341200EF013BC991XXXXXXX888C08A954265623
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1558993408
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
Extended master secret: yes
---
Я не знаю, с какой проблемой я сталкиваюсь, но похоже, что:
A) Самоподписанный .pfx был неправильно настроен, и теперь, когда ониспользуется в Linux, он не работает должным образом.
B) Мне нужно больше настроек в контейнере, о которых я не знаю.
Что еще показывают, я делаю?
Я думаю о том, чтобы, вероятно, создать другой сертификат для использования с хостов Linux.
Возможно ли создать еще один самозаверяющий сертификат с OpenSSL для IIS ver 8 и импортировать его в IIS?.
Любые идеи приветствуются, ура.