【发布时间】:2019-05-24 22:07:23
【问题描述】:
我正在尝试使用 TLS/SSL 保护 REST API,为此我需要更新我的客户端以使用公钥和证书。 客户端是用 dart 编写的,这是我实现 SecurityContext 的方式:
SecurityContext clientContext = SecurityContext.defaultContext;
var certificate = (await rootBundle.load("assets/ssl/coastr.crt")).buffer.asInt8List();
print(certificate.toString());
clientContext.setTrustedCertificatesBytes(certificate);
/*var authorities = (await rootBundle.load('assets/ssl/coastr.ca-bundle')).buffer.asUint8List();
print(authorities.toString());
clientContext.setClientAuthoritiesBytes(authorities);*/
var key = (await rootBundle.load("assets/ssl/coastr_public.key")).buffer.asInt8List();
print(key.toString());
clientContext.usePrivateKeyBytes(key);
HttpClient client = HttpClient(context: clientContext);
HttpClientRequest request = await client.getUrl(Uri.parse(url));
HttpClientResponse response = await request.close();
证书(.crt 文件)被添加到 clientContext 中没有问题,但是向它添加密钥会返回此错误:
[ERROR:flutter/lib/ui/ui_dart_state.cc(148)] Unhandled Exception:
TlsException: Failure in usePrivateKeyBytes (OS Error:
BAD_PKCS12_DATA(pkcs8_x509.c:606)
passed a null parameter(ssl_privkey.cc:375), errno = 0)
我使用的文件是:
coastr.crt 以 this 作为标头:-----BEGIN CERTIFICATE-----
coastr_public.key 带有标题:-----BEGIN PUBLIC KEY-----
我不知道我是否向客户提供了错误的文件,或者错误是否来自其他地方。 使用 openssl 生成的文件。
感谢您的帮助。
【问题讨论】:
标签: rest ssl https flutter dart