OpenSSL s_client возвращает неподдерживаемое назначение сертификата на одном компьютере, но нормально работает на другом с такими же сертификатами

Я отлаживаю проблему соединения TLS между хостом и контейнером докеров. У моего контейнера Docker есть сертификат сервера:

-----BEGIN CERTIFICATE-----
MIICWjCCAgGgAwIBAgIRANvW2Yf383GwxnIkjgkYSkYwCgYIKoZIzj0EAwIwcDEL
MAkGA1UEBhMCVVMxEzARBgNVBAgTCkNhbGlmb3JuaWExFjAUBgNVBAcTDVNhbiBG
cmFuY2lzY28xFjAUBgNVBAoTDWluc3VyYW5jZS1vcmcxHDAaBgNVBAMTE3Rsc2Nh
Lmluc3VyYW5jZS1vcmcwHhcNMTkxMDIzMDYyNjQyWhcNMjkxMDIwMDYyNjQyWjBT
MQswCQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2Fu
IEZyYW5jaXNjbzEXMBUGA1UEAxMOaW5zdXJhbmNlLXBlZXIwWTATBgcqhkjOPQIB
BggqhkjOPQMBBwNCAAR9Weg8lFSG6SdLYm78Vght0zHeGD3HkxkQ0lFkpL7cqNMF
Zjj9W+9iHI40Ww45Cj12EE5lts95s2fXtIRw5k/bo4GYMIGVMA4GA1UdDwEB/wQE
AwIFoDAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDAYDVR0TAQH/BAIw
ADArBgNVHSMEJDAigCD+YRoM4vL2vWIlIp0YNf3HmJL5NxHyB2Cmv5GrEJ9VWTAp
BgNVHREEIjAggg5pbnN1cmFuY2UtcGVlcoIOaW5zdXJhbmNlLXBlZXIwCgYIKoZI
zj0EAwIDRwAwRAIgQBSXuMpnKYfxiSoH6KWtLEZYF6bGjju1vSE3O2BLWswCICUq
9A08+Aj+u1Kv+BpNpTsYMZ8FMQvv4ACoKKBD6PJ0
-----END CERTIFICATE-----

Этот сертификат выдается центром сертификации со следующим сертификатом:

-----BEGIN CERTIFICATE-----
MIICPDCCAeOgAwIBAgIQYAbsZD8nQXqvSyVkNMYg/jAKBggqhkjOPQQDAjBwMQsw
CQYDVQQGEwJVUzETMBEGA1UECBMKQ2FsaWZvcm5pYTEWMBQGA1UEBxMNU2FuIEZy
YW5jaXNjbzEWMBQGA1UEChMNaW5zdXJhbmNlLW9yZzEcMBoGA1UEAxMTdGxzY2Eu
aW5zdXJhbmNlLW9yZzAeFw0xOTEwMjMwNjI2NDJaFw0yOTEwMjAwNjI2NDJaMHAx
CzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHEw1TYW4g
RnJhbmNpc2NvMRYwFAYDVQQKEw1pbnN1cmFuY2Utb3JnMRwwGgYDVQQDExN0bHNj
YS5pbnN1cmFuY2Utb3JnMFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEKkTdw/ia
IeHM/f4dzB0uGmhUCjo5uZxd7fpPHILRaWMwXh5BcxeNxNrwdBuvAJcrepiV+Pc+
eqv3RGF8u94j4aNfMF0wDgYDVR0PAQH/BAQDAgGmMA8GA1UdJQQIMAYGBFUdJQAw
DwYDVR0TAQH/BAUwAwEB/zApBgNVHQ4EIgQg/mEaDOLy9r1iJSKdGDX9x5iS+TcR
8gdgpr+RqxCfVVkwCgYIKoZIzj0EAwIDRwAwRAIgHR4M8sO20GazpTz9/MXDap4h
OVBMLCrP3M5fxLaykb0CIG8Vp1QszEvT1O5euZhsZoS5CcNLoFwbXT+ZuOlhUoV6
-----END CERTIFICATE-----

Когда я запускаю s_client на хосте компьютере:

$ openssl s_client -CAfile ./ca.crt -connect localhost:7051 -servername insurance-peer

Он возвращает

 SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-ECDSA-AES256-GCM-SHA384
    Session-ID:
    Session-ID-ctx:
    Master-Key: 94B93D75B297584B53E87ADA0968F2B3B9121F1CAA048212642195E299F6BEA24E482E19E35F5FF18D596E138955EEBF
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1571897582
    Timeout   : 7200 (sec)
    Verify return code: 26 (unsupported certificate purpose)
    Extended master secret: no

Обратите внимание, что код возврата 26 (неподдерживаемая цель сертификата)

Когда я запускаю s_client в докере контейнере

$ openssl s_client -connect insurance-peer:7051 -CAfile ./ca.crt

Он возвращает:

SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-ECDSA-AES256-GCM-SHA384
    Session-ID:
    Session-ID-ctx:
    Master-Key:85B6CAD935415FFDCC76623E9A1B5FC1749D3B7B450B41316F581A181D29039CA092B55F25170ED8D125B7ACFBE33289
    Key-Arg   : None
    PSK identity: None
    PSK identity hint: None
    SRP username: None
    Start Time: 1571897694
    Timeout   : 300 (sec)
    Verify return code: 0 (ok)

Обратите внимание, что код возврата здесь 0 (ok)

Таким образом, в случае соединения s_client между хостом и контейнером ошибка будет неподдерживаемым назначением сертификата , в то время как в случае соединения внутри контейнера. он работает нормально.

$ openssl verify работает нормально в обеих средах.

Хост:

$ openssl verify -CAfile ./ca.crt server.crt
server.crt: OK

Докер:

# openssl verify -CAfile ./ca.crt server.crt
server.crt: OK

Версия OpenSSL на хосте машина: OpenSSL 1.1. 1d 10 сентября 2019 г.

Версия OpenSSL на докере : OpenSSL 1.0.2g 1 марта 2016 г.

Не могли бы вы помочь мне, в чем может быть проблема здесь?

1
задан 24 October 2019 в 10:11
1 ответ

Похоже на этот отчет об ошибке: Nginx # 1760 .

Ваш ключ CA сообщает «Любое расширенное использование ключа». Поддерживается с OpenSSL 1.1.0. Вот почему разные версии ведут себя по-разному. Чтобы исправить это, мне кажется, вам нужно обновить OpenSSL.

1
ответ дан 3 December 2019 в 22:59

Теги

Похожие вопросы