问题标签 [certificate-pinning]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
42 浏览

certificate-pinning - 证书固定和转换 isrg-root 让我们加密

我想验证我的应用程序是否受到 let's encrypt https://letsencrypt.org/2019/04/15/transitioning-to-isrg-root.html宣布的事件的影响

我在我的 android 应用程序中使用 cert pinning 使用 pin

如何检查我的应用程序是否受到转换的影响?对测试快乐和坏的情况有什么建议吗?

0 投票
0 回答
125 浏览

ssl - 为什么在固定无效的中间证书但有效的叶(服务器)证书时 tls 证书验证失败?

这是我测试过的场景和内容:

我正在移动应用程序(颤振应用程序)中进行证书固定以固定我们后端域的证书。

证书验证通过并成功建立连接:

  1. 我固定有效的叶子证书和中间证书。
  2. 我只固定有效的叶子证书
  3. 我只固定有效的中间证书
  4. 我固定无效的叶子证书但有效的中间证书

验证并因此连接失败时:

  1. 我只固定无效的叶子证书。
  2. 我只固定无效的中间证书。
  3. 我固定无效的叶子证书和无效的中间证书。

根据上述行为,我得出以下结论:

  • 每当服务器发送其叶子证书时,首先检查它是否存在于固定证书集中。如果这个确切的叶子证书没有被固定,那么这个叶子证书没有被验证,因此它会查看谁签署了这个证书,这给了它中间证书。
  • 它再次检查此中间证书是否在固定证书集中。如果我们固定了相同的中间证书,那么它被认为是经过验证的,并且由于服务器证书是由经过验证的中间证书颁发的,所以连接将成功。
  • 因此,固定同一域的中间证书和叶证书(任何父证书和后代证书)是没有意义的,因为即使所有后代证书都未通过验证,也会考虑链中最顶层的证书。

在以下情况下,我如何再进行一次连接失败的测试:

  • 我固定有效的叶子证书但无效(不同的)中间证书。

  • 所以我之前的结论是首先检查叶子证书似乎是错误的,或者我在这里遗漏了一些东西。

这好像是 :

  • 链中的证书在固定的证书集中进行检查,从链中最顶部的证书到最底部(从根证书到叶证书)
注意:我固定无效中间证书的方法是更改​​证书中的一到两个字符(PEM 格式)。

我的结论正确吗?我在这里想念什么?是否从叶子检查证书,并且只有在验证失败时,它才会查看链上的其他证书?还是完全是别的东西?

0 投票
0 回答
83 浏览

ios - 在 iOS Swift 上进行公钥固定时的 ASN1 标头

在我可以从谷歌找到的大多数示例中,我总是看到人们对一些 ASN1 标头进行硬编码,如下所示:

但是,如果我尝试使用

openssl s_client connect www.google.com:443 < /dev/null | openssl x509 -outform DER > google.der

并使用

openssl asn1parse -inform DER -in google.der -noout -out data && hexdump -C data

标题显然不一样。我对 SSL 不是很熟悉,我的问题是;

1、如何获取RSA2048 ASN1 header的值?

2,我应该始终只使用 rsa2048 ASN1 标头,还是每次尝试对主机进行 cert-pin 时都提取 asn1 标头?

0 投票
1 回答
66 浏览

android - OkHttp 证书固定错误或默认行为?

最近,我一直在测试OkHttp提供的证书固定实现,使用版本 4.9.0 + Retrofit 2.9.0;而且我注意到哈希检查不是合取的,而是析取的。

根据示例实现publicobject.com的证书链:

如果我们更改证书并且我们使用与以前相同的提供者和/或 root 执行此操作,我们将得到如下内容:

只有第一个哈希值发生了变化,我自然会假设与站点的通信应该停止工作,因为我们的实现现在有一个不正确的哈希值,但事实并非如此,因为其他三个与以前相同。

创建新证书时是我的错误吗?这是正确的行为还是错误?有没有办法检查链中的所有哈希是否正确?

0 投票
1 回答
440 浏览

react-native - OkHttp certificatePinner 似乎不起作用

我需要一些帮助,

我试图在我的 react-native 应用程序(v0.63)上实现 SSLPinning。

我已经关注 OkHttp github 页面上的文档了

这是我为我的应用程序制作的代码:

OkHttpCertPin:

这是我在 MainActivity 上的 onCreate 方法:

它允许所有请求通过,即使我使用随机公钥和主机名。

我做错了什么?

我从 sslLabs 获得的所有公钥

0 投票
0 回答
40 浏览

android - 如何防止在 exoPlayer Android 中捕获 http 数据包?

我正在使用exoplayerandroid 应用程序中的库来播放托管在服务器上的视频,如https://ok.ru/video。我发现任何人都可以轻松获取和下载视频。

如果我使用令牌并作为标头发送,它可以被“数据包捕获”应用程序捕获。

有什么办法可以防止此类数据泄露。

我可以Certificate pinning与 exoPlayer 一起使用吗?

请帮我

0 投票
0 回答
269 浏览

android - 使用 Okhttp 的自签名证书未找到用于证书路径的 Android 信任锚

我的服务器正在使用自签名证书。我正在使用 Okhttp + Retrofit 进行 api 调用。我从服务器获得了 crt 文件和公钥 [SHA-256]。按照这个和来自谷歌文档的这个链接,我在xml文件夹中创建了一个 network_security_config 文件,并将我的 crt 文件添加到raw文件夹中,并将其添加到清单文件中

这是我根据谷歌文档的网络配置文件:

调用 api 时出现以下异常

所以以下是我的查询:

  1. 这是实施自签名证书固定的正确方法吗?因为谷歌在他们的文档中明确提到“幸运的是,您可以通过配置应用程序的网络安全配置来教您的应用程序信任自定义 CA ,而无需修改应用程序内部的代码。”

  2. 如果 network_security_config 正确,那么如何检查服务器配置是否有问题(crt 文件 + 公钥)

  3. 我是否需要手动加载 crt 文件,然后使用 keystore + sslfactory 来配置 ssl pinning,如此链接中提到的

注意:现在只是为了运行 api,我使用了一个不验证证书链的信任管理器,如下所示:

0 投票
3 回答
567 浏览

ios - iOS TLS/SSL Pinning 在 Info.plist 中使用 NSRequiresCertificateTransparency 键

我想使用 SSL Pinning 保护我的应用免受中间人 (mitm) 攻击。
默认情况下,可以使用像 Charles 或 mitmproxy 这样的代理来拦截流量,并使用自签名证书对其进行解密。

经过广泛的研究,我发现了几种选择:

  1. 添加NSPinnedDomains > MY_DOMAIN > NSPinnedLeafIdentitiesInfo.plist
    Apple 文档:Identity Pinning
    Guardsquare:利用基于 Info.plist 的证书固定
    优点:简单
    缺点:一旦更新证书/私钥(通常在几个月后),应用程序将无法使用

  2. 添加NSPinnedDomains > MY_DOMAIN > NSPinnedCAIdentitiesInfo.plist
    Apple 文档:与上述相同
    优点:简单。叶证书更新没有失败,因为根 CA 被固定(过期日期为几十年)
    缺点:似乎多余,因为大多数根 CA已经包含在操作系统中

  3. 检查代码中的证书URLSessionDelegate> SecTrustEvaluateWithError(或 Alamofire 包装器)
    Ray Wenderlich:使用 SSL Pinning 防止 iOS 中的中间人攻击
    Apple 文档:处理身份验证挑战
    Medium 文章:关于 SSL Pinning 需要了解的一切
    Medium 文章:保护 iOS具有 SSL Pinning
    优点的应用程序:更大的灵活性。可能更安全。Apple 推荐(参见上面的 Apple 链接)。
    缺点:(1)或(2)的一个更费力的版本。关于叶子到期/根 CA 冗余的缺点与 (1) 和 (2) 相同。更复杂。

  4. 添加 NSExceptionDomains > MY_DOMAIN > NSRequiresCertificateTransparency 到 Info.plist
    Apple 文档:部分 Info.plist 键“证书透明度”
    优点:非常简单。没有多余的 CA 集成。
    缺点:文档不清楚这是否应该用于 ssl pinning

经过评估,我得出以下结论:

  1. 由于证书过期,不适合生产应用程序
  2. 可能是简单性、安全性和可持续性之间的最佳平衡——但我不喜欢重复添加系统已经知道的根 CA
  3. 太复杂,太冒险,任何实现错误都可能锁死应用
  4. 我的首选方式。简单的。在我的测试中有效,但文档不明确。

我很想使用选项(4),但我不确定这是否真的适用于 ssl pinning。

在文档中它说:

证书透明度 (CT) 是 ATS 可用于识别错误或恶意颁发的 X.509 证书的协议。将 NSRequiresCertificateTransparency 键的值设置为 YES 以要求对于给定域,服务器证书由来自 Apple 信任的至少两个 CT 日志的有效签名 CT 时间戳支持。有关证书透明度的更多信息,请参阅 RFC6962。

并在链接的 RFC6962 中:

本文档描述了一个实验性协议,用于公开记录传输层安全 (TLS) 证书的存在 [...]

术语“实验性协议”和“公开日志记录”对我来说是一个标志,虽然在 Info.plist 中启用该功能似乎可以解决 SSL 固定问题,但我不确定是否应该使用它。
我绝不是安全专家,我需要一个非常简单的解决方案,它可以为我提供体面的保护,同时保护我免于因可能过期/更改的证书而窒息我自己的应用程序。

我的问题:

我应该NSRequiresCertificateTransparency在我的应用程序上使用 ssl pinning 和防止 mitm-attacks 吗?

如果不:

我应该改用什么?


PS:

在这个线程中基本上已经提出了同样的问题:
https ://developer.apple.com/forums/thread/675791

然而,答案是模糊的NSRequiresCertificateTransparency(4。在我上面的列表中):

对,证书透明度是一个很好的工具,用于验证提供的叶子是否包含一组 SCT(签名证书时间戳),或者嵌入在证书(RFC 6962)中,通过 TLS 扩展(可以在数据包跟踪中看到),或者通过检查证书的 OCSP 日志。当您在应用程序中做出信任决定时,我建议您通过 SecPolicyRef 对象查看 is 属性。

附加说明:

作为一家具有安全意识的公司,我对 Apple 的期望是,默认情况下会启用对根 CA 的固定,并且我必须手动添加异常,例如允许在调试版本时使用 Charles 代理。我听说Android就是这样做的。

0 投票
0 回答
275 浏览

ibm-mobilefirst - 证书固定问题(错误类型错误:无法读取未定义的属性(读取“然后”))

我正在使用 mfp 8,这是一个混合应用程序,它位于 Angular 7 和 cordova 中。

我已经实现了证书固定。但变得不确定。也尝试放入设备就绪。也在不同的地方尝试过,但同样的错误。任何人都可以帮忙吗?

我已将证书文件放在 android 代码“assets/certificates/mycer.cer”中。

错误类型错误:无法读取未定义的属性(读取“然后”)

控制台错误消息

0 投票
0 回答
50 浏览

c - SSL 证书固定 (OpenSSL / C)

任何人都可以向我指出有关如何使用 openSSL 在 C 中实现证书固定的基本教程吗?这是我到目前为止所拥有的:

  • 我的服务器证书,将成为我的客户端的一部分
  • 在客户端,我添加了此代码(减去我在此处删除的一些打印内容..):

`

但我想要的不仅是检查服务器的证书是否有效,还要检查它是否由我在客户端拥有的同一个 CA 签名。如何实现该功能?