【问题标题】:Dart Add SSL certificate and key to HttpClientDart 将 SSL 证书和密钥添加到 HttpClient
【发布时间】: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


    【解决方案1】:

    一般而言,您不必向客户端添加任何内容以允许其连接到正确配置的 HTTPS 服务器。希望服务器具有签名的服务器端证书。如果该证书由信誉良好的 CA 签名,则客户端应自动信任它。如果它由内部 CA 签名或自签名,则需要做一些工作。您需要向客户端提供签名证书。在前一种情况下,这将是根 CA 的证书。在后一种情况下,提供服务器的证书可能会起作用,但完全禁用客户端检查可能更容易。

    签名证书很可能是您发现的 CRT 格式。而且您需要完全按照您的方式提供。无需提供任何公钥,因为它们分布在与服务器 hello 一起发送的证书中。

    除非您想使用客户端证书,否则无需提供私钥,因此您可以跳过失败的步骤。无论如何,为其提供公钥肯定是行不通的。

    【讨论】:

    • 我想要实现的是只允许我的客户端访问 HTTPS 服务器,所以我猜我需要为客户端提供证书。这样做会导致服务器要求输入 PEM 密码。这听起来更像是服务器配置问题。我会调查一下,谢谢你的帮助
    猜你喜欢
    • 2011-08-17
    • 2013-01-02
    • 2018-01-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多