gpt4 book ai didi

rest - Dart 将 SSL 证书和 key 添加到 HttpClient

转载 作者:太空宇宙 更新时间:2023-11-03 14:26:47 38 4
gpt4 key购买 nike

我正在尝试使用 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,但向其添加 key 会返回此错误:

[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 以此作为 header :-----BEGIN CERTIFICATE-----

  • 带有 header 的 coastr_public.key :-----BEGIN PUBLIC KEY-----

我不知道我是否向客户提供了错误的文件,或者错误是否来自其他地方。使用 openssl 生成的文件。

感谢您的帮助。

最佳答案

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

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

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

关于rest - Dart 将 SSL 证书和 key 添加到 HttpClient,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56300017/

38 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com