Невозможно отправить в частный реестр Docker через TLS - PullRequest
0 голосов
/ 20 октября 2019

У меня есть QNAP NAS позади моего маршрутизатора с общедоступным IP-адресом 1.2.3.4. У меня есть сертификат для xxxx.yyyy.cz. Сертификат действителен, я могу подключиться к своему NAS через HTTPS. Я установил докер registry:2.7 на моем NAS. Это конфигурация среды контейнера:

REGISTRY_HTTP_ADDR  0.0.0.0:5443
REGISTRY_HTTP_TLS_CERTIFICATE   /certs/client.cert
REGISTRY_HTTP_TLS_KEY   /certs/client.key

Я настроил переадресацию портов с 5443 на 5443 TCP. В каталоге certs находятся 3 файла:

/certs # ls -al                                                                                                                                                                                
total 24                                                                                                                                                                                       
drwxrwxrwx    2 root     root          4096 Oct 20 17:02 .                                                                                                                                     
drwxr-xr-x    1 root     root          4096 Oct 20 17:01 ..                                                                                                                                    
-rwxrwxrwx    1 root     root          1688 Oct 20 16:42 ca.crt                                                                                                                                
-rwxrwxrwx    1 root     root          2060 Oct 20 16:42 client.cert                                                                                                                           
-rwxrwxrwx    1 root     root          1704 Oct 20 16:42 client.key 

Я могу получить ответ из реестра с помощью curl или через браузер:

$ curl --cacert Downloads/certs/ca.crt https://xxxx.yyyy.cz:5443/v2/_catalog ; echo $?
{"repositories":[]}
0

Так что я уверен, что сертификат правильный и реестр работаетправильно. Когда я вижу журналы контейнера, я все еще получаю следующие сообщения:

2019/10/20 17:51:10 http: TLS handshake error from 1.2.3.4:58164: tls: first record does not look like a TLS handshake
2019/10/20 17:51:30 http: TLS handshake error from 1.2.3.4:58334: tls: first record does not look like a TLS handshake
2019/10/20 17:51:50 http: TLS handshake error from 1.2.3.4:58498: tls: first record does not look like a TLS handshake
2019/10/20 17:52:11 http: TLS handshake error from 1.2.3.4:58654: tls: first record does not look like a TLS handshake
2019/10/20 17:52:31 http: TLS handshake error from 1.2.3.4:58810: tls: first record does not look like a TLS handshake
2019/10/20 17:52:51 http: TLS handshake error from 1.2.3.4:58982: tls: first record does not look like a TLS handshake
2019/10/20 17:53:12 http: TLS handshake error from 1.2.3.4:59136: tls: first record does not look like a TLS handshake

Когда я пытаюсь что-то перенести в свой реестр, я получаю сообщение об ошибке:

$ docker push xxxx.yyyy.cz:5443/myimage:latest
The push refers to repository [xxxx.yyyy.cz:5443/myimage]
Get https://xxxx.yyyy.cz:5443/v2/: x509: certificate signed by unknown authority

и в докереЖурналы Я вижу сообщение об ошибке:

2019/10/20 18:43:28 http: TLS handshake error from 1.2.3.4:41632: remote error: tls: bad certificate

Я использовал это и это инструкции, но это не помогло. После того, как я зарегистрировался в контейнере, я проверил свои файлы сертификатов sha256, они в порядке.

  1. Как я могу использовать TLS в моем реестре докера и почему он не принимает мои сертификаты?
  2. Почему это не работает с помощью команды Docker?

1 Ответ

0 голосов
/ 28 октября 2019

У меня были проблемы с client.cert. Он также должен содержать ca.crt в качестве упомянутого здесь в разделе ИСПОЛЬЗОВАТЬ ПРОМЕЖУТОЧНЫЙ СЕРТИФИКАТ :

Издатель сертификата может предоставить вам промежуточный сертификат. В этом случае вы должны объединить свой сертификат с промежуточным сертификатом для формирования пакета сертификатов. Вы можете сделать это с помощью команды cat:

cat domain.crt intermediate-certificates.pem > certs/domain.crt

Вы можете использовать пакет сертификатов так же, как и файл domain.crt в предыдущем примере.

...