- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 HttpClient
在 Flutter 应用程序中执行 SSL 证书固定.我之前已经成功地在原生 Android 应用程序中执行了固定。这是我收到的错误消息:
E/flutter (28810): [ERROR:flutter/lib/ui/ui_dart_state.cc(209)] Unhandled Exception: Exception: TlsException: Failure trusting builtin roots (OS Error:
E/flutter (28810): BAD_PKCS12_DATA(pkcs8_x509.c:645), errno = 0)
E/flutter (28810): #0 _SecurityContext.setTrustedCertificatesBytes (dart:io-patch/secure_socket_patch.dart:233:59)
E/flutter (28810): #1 ApiProvider._clientWithPinnedCertificate (package:app/api/api.provider.dart:68:13)
E/flutter (28810): #2 ApiProvider.makePostRequest (package:app/api/api.provider.dart:45:11)
E/flutter (28810): #3 _fireAuthenticationRequestIsolate (package:app/api/repositories/auth.repository.dart:14:41)
E/flutter (28810): #4 _IsolateConfiguration.apply (package:flutter/src/foundation/_isolates_io.dart:84:34)
E/flutter (28810): #5 _spawn.<anonymous closure> (package:flutter/src/foundation/_isolates_io.dart:91:65)
E/flutter (28810): #6 _spawn.<anonymous closure> (package:flutter/src/foundation/_isolates_io.dart:90:5)
E/flutter (28810): #7 Timeline.timeSync (dart:developer/timeline.dart:163:22)
E/flutter (28810): #8 _spawn (package:flutter/src/foundation/_isolates_io.dart:88:35)
E/flutter (28810): #9 _delayEntrypointInvocation.<anonymous closure> (dart:isolate-patch/isolate_patch.dart:286:17)
E/flutter (28810): #10 _RawReceivePortImpl._handleMessage (dart:isolate-patch/isolate_patch.dart:184:12)
下载
.cer
文件,我已将其转换为
.pem
使用以下命令:
openssl x509 -inform pem -in test.ca -outform der -out test.pem
我从
assets
加载证书像这样的文件夹:
const certificatePath = 'assets/test.pem';
final certificateBytes = await rootBundle.load(certificatePath);
final certificate = certificateBytes.buffer.asUint8List();
这是触发 HTTP POST 请求的 API 提供程序的代码
class ApiProvider {
final String _baseURL;
ApiProvider(String baseURL) : _baseURL = baseURL;
Future<String> makePostRequest(
String endpoint,
Map<String, dynamic> body, {
Map<String, String>? headers,
bool setTrustedCertificate = false,
}) async {
final client = setTrustedCertificate
? _clientWithPinnedCertificate()
: HttpClient();
final url = Uri.https(_baseURL, endpoint);
final response = await client.postUrl(url)
..headers.addAll(headers ?? <String, String>{})
..write(json.encode(body));
final request = await response.close();
if (request.statusCode < 200 || request.statusCode >= 300) {
throw ApiException(
request.statusCode,
request.reasonPhrase,
);
}
final responseBody = await request
.transform(const Utf8Decoder(allowMalformed: true))
.reduce((previous, element) => previous + element);
return responseBody;
}
HttpClient _clientWithPinnedCertificate() {
final context = SecurityContext();
context.setTrustedCertificatesBytes(
GlobalConstants.certificate,
password: certificatePassword,
);
final client = HttpClient(context: context);
client.badCertificateCallback = (
X509Certificate certificate,
String host,
int port,
) {
print('Bad certificate: ${certificate.sha1} for host $host:$port');
return false;
};
return client;
}
}
最佳答案
在玩了很长时间各种配置之后,我设法找到了一个解决方案,而且它比我想象的要深入一些。
首先,确保您没有调用 rootBundle.load()
在一个单独的隔离。我一直在这样做,这引发了模棱两可的错误。
二、如果你有.p12
文件,您不需要 .ca
(或转换为 .pem
)。您所要做的就是使用以下代码片段
// Here, certificate is a Uint8List
final context = SecurityContext.defaultContext
..useCertificateChainBytes(
certificate,
password: /* input certificate passphrase */
),
..usePrivateKeyBytes(
certificate,
password: /* input certificate passphrase */
);
final client = HttpClient(context: context);
client.badCertificateCallback = (
X509Certificate cert,
String host,
int port,
) {
// Handle certificate that can't be authenticated
// Returning 'true' by itself is not really safe...
return true;
};
确保在这两种情况下都提供密码。
关于 flutter TlsException : Failure trusting builtin roots,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69914598/
经过一个月的 docker trust 通过 GitLab CI 为我工作正常后,我突然收到了这条消息。 我有一个 Gitlab Runner 挂载 ~/.docker/trust (所以它被持久化)
我在 Ken Thompson 的一篇文章(阅读 here)中看到的这个 quine 没有重现相同的代码。我只是好奇为什么它不起作用?代码现在过时了吗? quine代码: char s[] = {
我们的一个网络应用程序想要连接ADFS 2.0服务器以获取凭据 token 并据此检查用户角色。 ADFS 服务器管理员要求我们向他们提供联合元数据 XML 文件,以便他们创建依赖方信任。我用谷歌搜索
我正在实现一个必须支持 WS-Trust (1.3) 的网络服务。 OASIS 将 WS-Trust 的命名空间定义为 http://docs.oasis-open.org/ws-sx/ws-trus
我正在尝试确保我的 ASP.Net 库能够在 Medium Trust 下运行。但是,我遇到了问题,如果它在中等信任下运行,我需要禁用一些代码。 如何从 C# 确定当前应用程序是否为中等信任度? 具体
假设您已使用 Google 2-step Verification 注册您的设备,当您返回网站时,它使用什么信息来验证您是否在该设备上? 它是否在您的计算机上存储了一些东西(如 cookie),还是使
我不仅尝试从通用的用户代理字符串中提取浏览器及其版本号,而且还提取呈现引擎及其版本号。大多数浏览器都报告这很好,例如: “Mozilla/4.0(兼容; MSIE 8.0; Windows NT 6.
运行 ANT 脚本目标时出现以下错误。错误消息显示“服务器证书验证失败”。请帮助如何消除这个问题。我在 Windows XP 中工作。 C:\apache-ant-1.8.1>ant checkout
来自ConcurrentHashMap的文档: A hash table supporting full concurrency of retrievals and adjustable expect
来自ConcurrentHashMap的文档: A hash table supporting full concurrency of retrievals and adjustable expect
我正在为我的组织使用 Tomcat 7、APR 和 DigiCert 签名的“星号”证书。我有一个定义如下的连接器: IE 和 Chrome 对我的站点/证书没有问题...虽然 Firefox 给出
我有包含 Symantec 的信任库。我正在尝试连接到由 VeriSign 签名的服务器。我在握手期间收到 ssl“未找到受信任的证书”。可能是因为我在信任库中没有 VeriSign CA? 我正在使
我想问一下Medium Trust允许哪些方法/类。例如,这些方法是否被允许? 获取属性,获取方法,激活器.CreateInstance,程序集版本,程序集名称.名称 请告诉我哪些方法是允许的。 最佳
我希望这里的大型社区中的任何人都可以帮助我编写我可以扩展的最简单的“可信”程序。 我使用的是 Ubuntu Linux 9.04,以及来自 Mario Strasser (http://tpm-emu
我正在尝试安装 Docker Truster Registry (DTR)。我正在执行以下命令: docker run -it --rm \ docker/dtr install \ --ucp-ur
[ 编辑 :我写了一篇博文,详细解释了一切:look here ] 你好! 我正在拼命尝试为基于 rfc3161 的可信时间戳构建服务。我决定使用 zeitstempel.dfn.de 上的免费可信时
终于得到了 MGTwitterEngine 的东西 编译(通过将 header 搜索路径设置为/usr/include/libxml2 iphoneos3.0/usr/lib/libxml2) 和链接
我还没有在一页中清楚地看到这一点:部分受信任的调用者。 我正在研究 APTCA,这总是被提及,但 MSDN 没有关于它的文章。 我只有一些线索,但我不是 100% 确定。 从网络共享执行的代码是否符合
我已将DTR安装在单个管理器, worker 群集上(在设置适当的环境之前先玩弄它以获得更好的理解) DTR安装成功。我想卸载DTR,并且卸载它没有任何问题。以下命令用于基于文档的卸载 Activit
我正在尝试设置 docker,以便它与修改后的公证人版本一起使用,从我的 HSM 中提取私钥。 为此,我正在使用公证人的这个 fork : https://github.com/gemalto/not
我是一名优秀的程序员,十分优秀!