Ошибка сертификата при подключении к ЕСИА через openssl
Делаю авторизацию через госуслуги. При подключении openssl s_client -connect esia.gosuslugi.ru:443 -showcerts не проходит проверка первого сертификата:
CONNECTED(00000003)
depth=0 CN = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8, C = RU, ST = 77 \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, L = \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, street = "\D0\9F\D1\80\D0\B5\D1\81\D0\BD\D0\B5\D0\BD\D1\81\D0\BA\D0\B0\D1\8F \D0\BD\D0\B0\D0\B1., \D0\B4.10, \D1\81\D1\82\D1\80.2", OGRN = 1047702026701, INN = 007710474375, O = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8
verify error:num=20:unable to get local issuer certificate
verify return:1
depth=0 CN = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8, C = RU, ST = 77 \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, L = \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, street = "\D0\9F\D1\80\D0\B5\D1\81\D0\BD\D0\B5\D0\BD\D1\81\D0\BA\D0\B0\D1\8F \D0\BD\D0\B0\D0\B1., \D0\B4.10, \D1\81\D1\82\D1\80.2", OGRN = 1047702026701, INN = 007710474375, O = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8
verify error:num=21:unable to verify the first certificate
verify return:1
---
Certificate chain
0 s:CN = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8, C = RU, ST = 77 \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, L = \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, street = "\D0\9F\D1\80\D0\B5\D1\81\D0\BD\D0\B5\D0\BD\D1\81\D0\BA\D0\B0\D1\8F \D0\BD\D0\B0\D0\B1., \D0\B4.10, \D1\81\D1\82\D1\80.2", OGRN = 1047702026701, INN = 007710474375, O = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8
i:emailAddress = [email protected], C = RU, ST = 77 \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, L = \D0\B3. \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, street = "\D1\83\D0\BB\D0\B8\D1\86\D0\B0 \D0\A2\D0\B2\D0\B5\D1\80\D1\81\D0\BA\D0\B0\D1\8F, \D0\B4\D0\BE\D0\BC 7", O = \D0\9C\D0\B8\D0\BD\D0\BA\D0\BE\D0\BC\D1\81\D0\B2\D1\8F\D0\B7\D1\8C \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8, OGRN = 1047702026701, INN = 007710474375, CN = \D0\9C\D0\B8\D0\BD\D0\BA\D0\BE\D0\BC\D1\81\D0\B2\D1\8F\D0\B7\D1\8C \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8
-----BEGIN CERTIFICATE-----
MIIHazCCBxigAwIBAgIKIrZxZQAAAAAExDAKBggqhQMHAQEDAjCCASQxHjAcBgkq
hkiG9w0BCQEWD2RpdEBtaW5zdnlhei5ydTELMAkGA1UEBhMCUlUxGDAWBgNVBAgM
Dzc3INCc0L7RgdC60LLQsDEZMBcGA1UEBwwQ0LMuINCc0L7RgdC60LLQsDEuMCwG
A1UECQwl0YPQu9C40YbQsCDQotCy0LXRgNGB0LrQsNGPLCDQtNC+0LwgNzEsMCoG
A1UECgwj0JzQuNC90LrQvtC80YHQstGP0LfRjCDQoNC+0YHRgdC40LgxGDAWBgUq
hQNkARINMTA0NzcwMjAyNjcwMTEaMBgGCCqFAwOBAwEBEgwwMDc3MTA0NzQzNzUx
LDAqBgNVBAMMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQuNC4MB4X
DTIwMTEwNTEzMDkzNFoXDTIzMTEwNTEzMDkzNFowgf4xJjAkBgNVBAMMHdCc0LjQ
vdGG0LjRhNGA0Ysg0KDQvtGB0YHQuNC4MQswCQYDVQQGEwJSVTEYMBYGA1UECAwP
Nzcg0JzQvtGB0LrQstCwMRUwEwYDVQQHDAzQnNC+0YHQutCy0LAxODA2BgNVBAkM
L9Cf0YDQtdGB0L3QtdC90YHQutCw0Y8g0L3QsNCxLiwg0LQuMTAsINGB0YLRgC4y
MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3NzEw
NDc0Mzc1MSYwJAYDVQQKDB3QnNC40L3RhtC40YTRgNGLINCg0L7RgdGB0LjQuDBm
MB8GCCqFAwcBAQEBMBMGByqFAwICJAAGCCqFAwcBAQICA0MABEBmlqQe/XNGQR4n
AdzNSNpG2+01fxx0T4r2cL5E3zU/cnPKew2S5jFny/7+zGBjK9Hex5XWnNg8cA14
uy66Z3hao4IERjCCBEIwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMCMA4G
A1UdDwEB/wQEAwIE8DAnBgNVHSAEIDAeMAgGBiqFA2RxATAIBgYqhQNkcQIwCAYG
KoUDZHEDMCcGA1UdEQQgMB6CDGdvc3VzbHVnaS5ydYIOKi5nb3N1c2x1Z2kucnUw
XwYFKoUDZG8EVgxU0JrQodCf0JogItCa0YDQuNC/0YLQvtCf0YDQviBOR2F0ZSIg
0LLQtdGA0YHQuNGPIDEuMCAo0LjRgdC/0L7Qu9C90LXQvdC40Y8gNCwgNywgMTAp
MIIBZQYDVR0jBIIBXDCCAViAFMJU8bRr1Ey34G02tCOQ8f7DPJsGoYIBLKSCASgw
ggEkMR4wHAYJKoZIhvcNAQkBFg9kaXRAbWluc3Z5YXoucnUxCzAJBgNVBAYTAlJV
MRgwFgYDVQQIDA83NyDQnNC+0YHQutCy0LAxGTAXBgNVBAcMENCzLiDQnNC+0YHQ
utCy0LAxLjAsBgNVBAkMJdGD0LvQuNGG0LAg0KLQstC10YDRgdC60LDRjywg0LTQ
vtC8IDcxLDAqBgNVBAoMI9Cc0LjQvdC60L7QvNGB0LLRj9C30Ywg0KDQvtGB0YHQ
uNC4MRgwFgYFKoUDZAESDTEwNDc3MDIwMjY3MDExGjAYBggqhQMDgQMBARIMMDA3
NzEwNDc0Mzc1MSwwKgYDVQQDDCPQnNC40L3QutC+0LzRgdCy0Y/Qt9GMINCg0L7R
gdGB0LjQuIIQTm1HiybyfWV/do4CXOPTkzAdBgNVHQ4EFgQUJsCl07GDMx8M8GSk
Ri/ouRJaRW0wgZgGA1UdHwSBkDCBjTAtoCugKYYnaHR0cDovL3JlZXN0ci1wa2ku
cnUvY2RwL2d1Y19nb3N0MTIuY3JsMC2gK6AphidodHRwOi8vY29tcGFueS5ydC5y
dS9jZHAvZ3VjX2dvc3QxMi5jcmwwLaAroCmGJ2h0dHA6Ly9yb3N0ZWxlY29tLnJ1
L2NkcC9ndWNfZ29zdDEyLmNybDBDBggrBgEFBQcBAQQ3MDUwMwYIKwYBBQUHMAKG
J2h0dHA6Ly9yZWVzdHItcGtpLnJ1L2NkcC9ndWNfZ29zdDEyLmNydDCB9QYFKoUD
ZHAEgeswgegMNNCf0JDQmtCcIMKr0JrRgNC40L/RgtC+0J/RgNC+IEhTTcK7INCy
0LXRgNGB0LjQuCAyLjAMQ9Cf0JDQmiDCq9CT0L7Qu9C+0LLQvdC+0Lkg0YPQtNC+
0YHRgtC+0LLQtdGA0Y/RjtGJ0LjQuSDRhtC10L3RgtGAwrsMNdCX0LDQutC70Y7R
h9C10L3QuNC1IOKEliAxNDkvMy8yLzIvMjMg0L7RgiAwMi4wMy4yMDE4DDTQl9Cw
0LrQu9GO0YfQtdC90LjQtSDihJYgMTQ5LzcvNi8xMDUg0L7RgiAyNy4wNi4yMDE4
MAoGCCqFAwcBAQMCA0EA1EEbSanr3VHZCjSIJpiXck8+OPrDBGSvqsDFjzhThy7X
K+/YXdSicy4R4zeCuFoUEktLQK+IroidF4GSXNFmsg==
-----END CERTIFICATE-----
---
Server certificate
subject=CN = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8, C = RU, ST = 77 \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, L = \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, street = "\D0\9F\D1\80\D0\B5\D1\81\D0\BD\D0\B5\D0\BD\D1\81\D0\BA\D0\B0\D1\8F \D0\BD\D0\B0\D0\B1., \D0\B4.10, \D1\81\D1\82\D1\80.2", OGRN = 1047702026701, INN = 007710474375, O = \D0\9C\D0\B8\D0\BD\D1\86\D0\B8\D1\84\D1\80\D1\8B \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8
issuer=emailAddress = [email protected], C = RU, ST = 77 \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, L = \D0\B3. \D0\9C\D0\BE\D1\81\D0\BA\D0\B2\D0\B0, street = "\D1\83\D0\BB\D0\B8\D1\86\D0\B0 \D0\A2\D0\B2\D0\B5\D1\80\D1\81\D0\BA\D0\B0\D1\8F, \D0\B4\D0\BE\D0\BC 7", O = \D0\9C\D0\B8\D0\BD\D0\BA\D0\BE\D0\BC\D1\81\D0\B2\D1\8F\D0\B7\D1\8C \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8, OGRN = 1047702026701, INN = 007710474375, CN = \D0\9C\D0\B8\D0\BD\D0\BA\D0\BE\D0\BC\D1\81\D0\B2\D1\8F\D0\B7\D1\8C \D0\A0\D0\BE\D1\81\D1\81\D0\B8\D0\B8
---
No client certificate CA names sent
---
SSL handshake has read 2034 bytes and written 544 bytes
Verification error: unable to verify the first certificate
---
New, TLSv1.0, Cipher is GOST2012-GOST8912-GOST8912
Server public key is 256 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : GOST2012-GOST8912-GOST8912
Session-ID: 59E82626714059F7DD0CABE0AEA0FF32628E3B205272D3E7A5B8A66C7AA6B5D3
Session-ID-ctx:
Master-Key: ECA68B5011361DB5D7239AAC1356C5ED307A0D0AE77A954A67256BE1D6FA3C3DEFAB7298A5D1E5712C38F8E78356EF21
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1628503270
Timeout : 7200 (sec)
Verify return code: 21 (unable to verify the first certificate)
Extended master secret: no
Обращение к сервису происходит из докер-контейнера php-fpm с шифрованием ГОСТ 2012. Какой сертификат нужно использовать - не понимаю.
Ответы (3 шт):
Начнем с то что стоит определиться, с каким доменом проблемы. ЕСИА имеет тестовый и боевой им нужны разные сертификаты. Для боевого нужно два сертификата: сертификат минком связи, и сертификат от comodo (sectigo) вот отсюда если что: https://sectigo.com/knowledge-base/detail/Sectigo-Intermediate-Certificates/kA01N000000rfBO
С тестовы проблема, там в подписях значится тестовы сц РТК, его сертификаты я не смог найти в открытом доступе
Для тестового контура помогло скопировать сертификат который отдается в ответе openssl s_client и добавить его в формате .crt в ca-certificates.
Дополню ответ Ивана, для корректной работы ЕСИА нужна поддержка OpenSSL GOST-шифрования и установленные российские сертификаты, их может не быть даже в российских дистрибутивах Linux.
Dот здесь https://ca.gisca.ru/support/repository/ репозиторий сертификатов, откуда можно взять сертификат с названием [ГОСТ 34.10-2012] Минкомсвязь России
Так же может понадобится установить сертификаты вот отсюда: https://www.gosuslugi.ru/crt
Для установки на Ubuntu, нужно конвертировать сертификаты в формат .pem
openssl x509 -in <имя файла>.cer -out <имя файла>.crt --outform=pem
PEM текстовый, его можно открыть редактором и посмотреть, .cer - бинарный.
Установить сертификат можно скопировав его в /usr/local/share/ca-certificates
sudo cp <имя файла>.pem /usr/local/share/ca-certificates
и запустив
sudo update-ca-certificates
Команда покажет что-то типа
Updating certificates in /etc/ssl/certs...
1 added, 0 removed; done.
1 значит что у вас какого-то сертификата не было и он установился. Проверить работу можно банальным
curl https://esia.gosuslugi.ru