问题标签 [sslpinning]

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 投票
0 回答
27 浏览

certificate - 如何在 iOS 9 中实现公钥固定

我想在 iOS 9 中实现公钥固定。

从 iOS 10.3 及更高版本我知道如何做到这一点,但低于该版本我不知道如何做到这一点。

在应用程序方面,我将保留一个或多个“base64 编码的散列公钥”,并希望与来自服务器信任的公钥进行比较。即使我知道如何从 iOS 9 中的服务器信任中提取公钥(见下文),但我不知道如何将此密钥转换为哈希,然后在 base64 中编码,以便我可以与本地存储的密钥进行比较

0 投票
0 回答
14 浏览

angular - 是否有任何库可用于读取 Angular 中的 SSL 证书信息?

我正在为我的 Angular 应用程序中使用的 Web API(URL) 进行 SSL 固定。我通过一些 npm 模块(例如 ssl-information、ssl-checker)来获取 SSL 信息

但是这些 npm 模块是基于节点环境的.. 不能在 Angular 应用程序中工作。任何人都可以建议我阅读给定 URL 的 SSL 信息的工作库吗?

注意:我只能将 URL 作为输入参数而不是证书或密钥传递。

0 投票
0 回答
10 浏览

java - REPOSTING - SSL Pinning 以避免 mitm 和加密 api 请求/响应

[转帖]

我正在构建一个 android 应用程序,客户端希望我进行 SSL Pinning 以避免任何 Mitm 攻击。我已经对我的 API 请求(JSON 格式)和相应的响应(JSON 格式)实现了完整的加密和解密。

通过谷歌搜索和阅读一些博客,我对 Mitm 攻击的理解是,攻击者可以拦截请求,修改数据并将其发送到后端服务器,然后更改响应并将其推送回带有错误数据的客户端应用程序。但是由于我的请求和响应是完全加密的(加密),是否仍然可以对我的应用程序进行 Mitm 攻击并更改数据?

我知道请求仍然可以被截获并且攻击者可以看到加密的数据,但是由于他没有要解密的密钥,所以它没有用,如果加密的字符串被更改,解密将失败,导致应用程序无法加载任何模仿 Mitm 行为的东西,如果证书密钥不匹配,连接就会终止。

我在这里找到了这个解决方案,用 Volley 库在 android 应用程序中实现 SSL Pinning。是否足够或者我应该实施其他一些方法。

任何帮助表示赞赏。

0 投票
0 回答
153 浏览

ios - 用于 Ionic Angular 应用程序的 iOS 上的 SSL 固定

我在 iOS 上遇到 SSL 固定问题。我正在使用以下插件:

https://github.com/silkimen/cordova-plugin-advanced-http

https://ionicframework.com/docs/native/http

此方法适用于 Android。但是,对于 iOS,我在 Xcode 上收到以下错误:

我不知道如何解决这个问题。我到处搜索,大多数解决方案都是针对 Android 的,而不是专门针对 iOS 的。

很感谢任何形式的帮助。谢谢你。

0 投票
0 回答
468 浏览

java - java.io.IOException:流不代表 PKCS12 密钥库

我正在尝试从应用程序的内部存储在 android 中应用证书固定。我有一个带有 .pfx 文件扩展名的证书。当我尝试从捆绑原始文件夹中读取文件时,它工作正常,但是当我尝试从内部存储中读取它时,它给了我一个例外:

java.io.IOException:流不代表 PKCS12 密钥库

我使用的方法是:

有人可以请。提前致谢。sslCertificate.pfx 给出了这个结果

0 投票
1 回答
616 浏览

android - 使用 frida 绕过 Flutter 应用的 Sslpinning 中的空地址

我正在通过使用这种方法和这种方法在 genymotion x86 上测试一个颤振的 android 应用程序以绕过 sslpinning ,但是我的函数地址在运行 Frida 时返回 null。

首先,通过Ghidra找到了函数的地址,即 (0x773c52),这里是该函数早期行的字节: (\x55\x41\x57\x41\x56\x41\x55\x41\x54\x53\ x48\x81\xec\xf8\x00\x00\x00\xc6) 然后通过binwalk找到地址的正确偏移量:

接下来我在 Frida 代码中使用了这个地址,如下所示:

最后,当我运行 Frida 脚本时,我遇到了空地址异常。

TypeError:无法在(frida/runtime/core.js:45)的应用(本机)处的disablePinning(/hook_ssl.js:20)处读取null的属性“添加”

frida中的空地址错误

我还尝试了许多不同版本的 Frida。有人知道为什么会这样吗?

提前致谢。

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 回答
13 浏览

react-native - 凭据:“省略”选项在 MaxToyberman/react-native-ssl-pinning 中不起作用

这是我正在执行的获取请求我不想在我的整个应用程序的架构中使用 cookie 所以我使用了 credential = 'omit' 这对于 react-native 的获取很好但是这里的请求仍然包含 Cookie

这是我通过使用 disableAllSecurity 关闭 SSL 固定在 burp 套件中截获的请求

有没有其他方法可以在获取请求中停止/阻止 Cookie?

使用MaxToyberman/react-native-ssl-pinning中的 fetch

0 投票
0 回答
31 浏览

flutter - Flutter 中 WebSocket 的 SSL/TLS 固定

我想知道是否可以在 Flutter 中为 Web 套接字进行证书固定。
如果可能的话,我们该怎么做呢?
如果有人可以提供任何解释/参考链接,那将非常有帮助。

0 投票
0 回答
56 浏览

ios - React Native IOS - SSL pinning with trustkit

我在 React 本机 IOS 应用程序中遇到 SSL 固定问题。我尝试使用 react-native-pinch、react-native-cert-pinner、react-native-ssl-pinning 插件。但他们都没有成功。终于进入了trustkit。任何人都可以建议在 react-native IOS 应用程序中处理 SSL 固定的正确方法和步骤吗?