如何在 Swift 中固定 certificate.pem 和 private_key.pem 文件以签署 http 请求
Posted
技术标签:
【中文标题】如何在 Swift 中固定 certificate.pem 和 private_key.pem 文件以签署 http 请求【英文标题】:How to pin certificate.pem and private_key.pem files to sign http request in Swift 【发布时间】:2018-04-17 08:06:09 【问题描述】:我有这两个文件(certificate.pem 和 private_key.pem),它们由我使用的 API 提供。我需要使用这些文件在 Swift 项目中签署我的 http 请求。
我可以用 Postman 做到这一点。我在 Postman 的 Add Client Certificate 选项卡中添加了 certificate.pem 作为 CRT 文件和 private_key.pem 作为 KEY 文件。当我在 Postman 上发送带有标头和参数的 PUT 请求时,我会从 Web 服务器收到成功消息。
但是当我在 Xcode 中使用 Swift3 和 Alamofire 尝试所有这些事情时,我总是收到错误消息。您能帮我如何将这个 PEM 文件固定到 http 请求吗?
【问题讨论】:
您是否正在尝试使用证书进行 SSL pining? 是的,我想是的 :) 这是为 Teller 还是 Plaid API 准备的? 是的@FernandoB,它是针对 Teller API 的……很高兴看到有人在 2 年后遇到类似问题 :) 【参考方案1】:Alamofire 不直接支持 PEM 文件。您需要先将它们转换为 DER 文件,这在 here 中进行了解释。然后,您需要将新的 DER 文件添加到您的应用目标。最后,按照 README 的 Security 部分中的说明启用服务器信任策略。
let serverTrustPolicies: [String: ServerTrustPolicy] = [
"test.example.com": .pinCertificates(
certificates: ServerTrustPolicy.certificates(),
validateCertificateChain: true,
validateHost: true
),
"insecure.expired-apis.com": .disableEvaluation
]
let sessionManager = SessionManager(
serverTrustPolicyManager: ServerTrustPolicyManager(
policies: serverTrustPolicies
)
)
ServerTrustPolicy.certificates()
调用可以在 here 中找到,它从捆绑包中加载 CER 和 DER 文件中的所有数据并将它们用于固定。
希望这可以帮助您继续前进。 ?
【讨论】:
实际上,我已经尝试过这样做。但据我了解,由于使用了两个证书(我的意思是证书和 private_key),我遇到了麻烦。 @cnoon 我也收到此错误。 CredStore - copyIdentPrefs - 复制身份凭据时出错。错误=-25300,查询= class= idnt; labl = "api.teller.io:443"; “r_Ref” = 1;以上是关于如何在 Swift 中固定 certificate.pem 和 private_key.pem 文件以签署 http 请求的主要内容,如果未能解决你的问题,请参考以下文章
如何更改 Shiny Dashboard 中固定控制栏的颜色