Как я могу сделать закрепление открытого ключа во Flutter? - PullRequest
0 голосов
/ 16 февраля 2019

Я хочу прикрепить открытый ключ моего сервера, чтобы любой запрос к серверу должен был иметь этот открытый ключ (это нужно для того, чтобы прокси, такие как Чарльз, прослушивал данные).

Я сделалчто-то похожее в Android с Volley.

Как я могу сделать то же самое с Flutter?

1 Ответ

0 голосов
/ 23 февраля 2019

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

SecurityContext(withTrustedRoots: false);

В обратном вызове плохого сертификата проанализируйте закодированный сертификат DER, используя пакет asn1lib .Например:

ASN1Parser p = ASN1Parser(der);
ASN1Sequence signedCert = p.nextObject() as ASN1Sequence;
ASN1Sequence cert = signedCert.elements[0] as ASN1Sequence;
ASN1Sequence pubKeyElement = cert.elements[6] as ASN1Sequence;

ASN1BitString pubKeyBits = pubKeyElement.elements[1] as ASN1BitString;

List<int> encodedPubKey = pubKeyBits.stringValue;
// could stop here and compare the encoded key parts, or...

// parse them into their modulus/exponent parts, and test those
// (assumes RSA public key)
ASN1Parser rsaParser = ASN1Parser(encodedPubKey);
ASN1Sequence keySeq = rsaParser.nextObject() as ASN1Sequence;
ASN1Integer modulus = keySeq.elements[0] as ASN1Integer;
ASN1Integer exponent = keySeq.elements[1] as ASN1Integer;

print(modulus.valueAsBigInteger);
print(exponent);
...