SSL 固定 - 在 AFSecurityPolicy 中设置固定 public 密钥而不是固定证书

SSL pinning - setting pinned public keys instead of pinned certificates in AFSecurityPolicy

我正在使用 AFNetworking 进行 SSL 固定。我用下面的代码让它工作。

AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
manager.securityPolicy = [AFSecurityPolicy policyWithPinningMode:AFSSLPinningModePublicKey];
[manager.securityPolicy setPinnedCertificates:myCertificate];

我的问题是,有没有办法在 AFSecurityPolicy 中设置 public 密钥而不是证书?我们的证书偶尔会更改,我不想将其传递进去。AFSecurityPolicy.h 中没有 setPublicKeys 方法。 AFSecurityPolicy.m有一个属性pinnedPublicKeys但是不能设置,因为它不在头文件中。

提前致谢。

密钥是通过捆绑包中的 .cer 文件自动从证书中提取的,或者当您手动设置 pinnedCertificates 属性 时。只要 public 密钥不变,即使旧证书已过期,新证书也可以使用。

参见 the implementation of setPinnedCertificates:(以及 AFPublicKeyForCertificate 函数)。如果您不清楚它是如何工作的,我建议设置一个断点并在应用程序启动时单步执行它。