Я работаю над мобильным приложением, которое отправляет запросы к общедоступным API-интерфейсам моей компании и использует действительный сертификат для создания безопасного соединения с моей стороны каждый раз, когда я пытаюсь сделать исключение рукопожатия запроса, которое не может получить сертификат локального эмитента. и когда я запускаю эту команду
openssl s_client -showcerts -servername pub.dartlang.org -connect pub.dartlang.org:443
вывод показан ниже
CONNECTED(00000003)
depth=1 C = US, O = Let's Encrypt, CN = Let's Encrypt Authority X3
verify error:num=20:unable to get local issuer certificate
---
Certificate chain
0 s:/CN=pub.dartlang.org
i:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
-----BEGIN CERTIFICATE-----
....
-----END CERTIFICATE-----
1 s:/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
i:/O=Digital Signature Trust Co./CN=DST Root CA X3
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
---
Server certificate
subject=/CN=pub.dartlang.org
issuer=/C=US/O=Let's Encrypt/CN=Let's Encrypt Authority X3
---
No client certificate CA names sent
Peer signing digest: SHA256
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 3055 bytes and written 456 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES128-GCM-SHA256
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
No ALPN negotiated
SSL-Session:
Protocol : TLSv1.2
Cipher : ECDHE-RSA-AES128-GCM-SHA256
Session-ID: 6E905904FEF3D9B5BA45A2F9140CD2DEC8F31F762759AB2193FD0649585348C9
Session-ID-ctx:
Master-Key: B7762B8FC1543749F02A0011ABBEC22E2C29CA0089F5A4410CCFDE2DB2F1067CED0D8496522292A0338E855E3C717B4E
Key-Arg : None
PSK identity: None
PSK identity hint: None
SRP username: None
Start Time: 1571919503
Timeout : 300 (sec)
Verify return code: 20 (unable to get local issuer certificate)
---
read:errno=0
как это решить - я не хочу использовать код, который доверяет всем сертификатам - я не хочу добавлять свой сертификат в папку активов
любое другое решение? например, добавить мой сертификат в доверенное хранилище флаттера?
pub.dartlang.org
имеет отношение к серверу вашей компании? Есть ряд решений. Получение сертификата сервера, подписанного ЦС, которому уже доверяют. Если вы используете внутренний ЦС, у вас нет особого выбора, кроме как добавить сертификат ЦС в активы и добавить его в качестве еще одного доверенного корня. Окончательный выбор — проверить сертификат сервера самостоятельно в коде: есть ли у него правильная подпись и т. д. - person Richard Heap   schedule 27.10.2019