我正在尝试在反应本地应用程序(RN 0.60)中实现SSL固定,并且正在使用Trustkit。
按照https://github.com/datatheorem/TrustKit中发布的指南,这些是我已经完成的步骤:
1)使用pod 'TrustKit'
和pod install
安装TrustKit pod
2)将这段代码添加到我的AppDelegate.m
中:
#import <TrustKit/TrustKit.h>
//inside didFinishLaunchingWithOptions
NSDictionary *trustKitConfig =
@{
kTSKSwizzleNetworkDelegates: @YES,
kTSKPinnedDomains: @{
@"www.datatheorem.com" : @{
kTSKEnforcePinning:@YES,
kTSKIncludeSubdomains:@YES,
//Using wrong hashes so it fails
kTSKPublicKeyHashes : @[
@"Ca5gV6n7OVx4AxtEaIk8NI9qyKBTtKJjwqullb/v9hh=",
@"YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihh="
]
}}};
[TrustKit initSharedInstanceWithConfiguration:trustKitConfig];
当我尝试去做
RNFetchBlob.fetch('GET', "https://www.datatheorem.com", {}) //tried using standard fetch() but gives same results
.then(async(res) => {
console.log('RES => ' ,res)
})
// Something went wrong:
.catch((err) => {
console.log('ERROR =>', err);
})
它进入
then
内部,没有给出任何错误,但是以200状态代码(使用错误的哈希)响应。否则,使用Android它将正常工作,进入陷阱并说:
Error: Pin verification failed
最佳答案
因此,我回到了这一点,并再次尝试了一下,然后使其开始工作。我当前的代码与我之前发布的代码唯一的不同是,我在特定的固定域内添加了kTSKPublicKeyAlgorithms : @[kTSKAlgorithmRsa2048]
。
我遵循了我在问题中发布的相同步骤。最终的AppDelegate
看起来像:
在didFinishLaunchingWithOptions
之前的return YES
内部,我添加了:
[self initTrustKit];
然后在
didFinishLaunchingWithOptions
的括号内添加:- (void)initTrustKit {
NSDictionary *trustKitConfig =
@{
kTSKSwizzleNetworkDelegates: @YES,
kTSKPinnedDomains : @{
@"www.datatheorem.com" : @{
kTSKEnforcePinning : @YES,
kTSKIncludeSubdomains:@YES,
kTSKPublicKeyHashes : @[
@"Ca5gV6n7OVx4AxtEaIk8NI9qyKBTtKJjwqullb/v9hh=",
@"YLh1dUR9y6Kja30RrAn7JKnbQG/uEtLMkBgFF2Fuihh="
],
kTSKPublicKeyAlgorithms : @[kTSKAlgorithmRsa2048],
},
}};
[TrustKit initSharedInstanceWithConfiguration:trustKitConfig];
}
不适用于iOS返回捕获和打印:
ERROR => cancelled