微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin ios、SSL 固定:计算的公钥哈希不匹配

如何解决Xamarin ios、SSL 固定:计算的公钥哈希不匹配

我们正在尝试在我们的 Xamarin.ios 应用中实现 SSL 固定。

POC :作为概念证明,我们计算了 https://www.google.co.uk 的公钥哈希。我们使用了 openssl s_client -servername www.google.co.uk -connect www.google.co.uk:443 | openssl x509 -pubkey -noout | openssl pkey -pubin -outform der | openssl dgst -sha256 -binary | openssl enc -base64 命令在终端中获取公钥(SHA256)的哈希值。

我们将 https://www.google.co.uk 的公钥散列固定在我们的应用内,并尝试在运行时进行比较。

然后使用 NSURLSession 我们尝试获取 https://www.google.co.uk 的数据。 在 DidReceiveChallenge 中,我们使用以下代码计算公钥的哈希值:

b'\xff\xfe0\x003\x006\x003\x00D\x001\x000\x001\x005\x00F\x005\x004\x000\x002\x006\x005\x006\x00E\x000\x00A\x001\x004\x000\x00A\x000\x004\x001\x000\x000\x002\x001\x008\x000\x001\x001\x002\x000\x00C\x001\x002\x000\x00A\x003\x000\x003\x001\x003\x002\x003\x003\x003\x004\x003\x005\x003\x006\x003\x007\x003\x008\x003\x009\x000\x00A\x000\x00A\x000\x00A\x000\x004\x001\x000\x000\x007\x001\x008\x000\x002\x001\x002\x000\x002\x001\x008\x000\x002\x000\x00A\x001\x002\x000\x00A\x000\x004\x001\x000\x003\x00A\x001\x008\x001\x009\x001\x002\x000\x00A\x003\x00A\x000\x008\x000\x00A\x000\x002\x000\x000\x000\x001\x001\x000\x000\x002\x002\x000\x000\x001\x000\x00A\x000\x00A\x000\x00A\x000\x004\x001\x000\x003\x00A\x001\x008\x006\x002\x001\x002\x000\x002\x003\x000\x000\x000\x000\x00A\x001\x004\x000\x00A\x000\x004\x001\x000\x000\x008\x001\x008\x006\x004\x001\x002\x000\x00C\x004\x002\x000\x00A\x000\x008\x002\x008\x001\x000\x005\x009\x001\x008\x000\x001\x002\x000\x004\x004\x002\x008\x004\x004\x008\x004\x003\x006\x00B\x005\x007\x00E\x00'

哈希计算函数体如下:

SecKey key = challenge.ProtectionSpace.ServerSecTrust.GetKey();
 NSError error = new NSError();
NSData keyData = key.GetExternalRepresentation(out error);
string str = sha256(keyData);

但是我们上面写的sha256函数返回的hash和终端命令计算出来的hash不匹配。

我们在哈希计算中做错了什么。?我们也试过公钥api,SecKey key = challenge.ProtectionSpace.ServerSecTrust.GetPublicKey();

我们为此方法引用了这篇文章https://medium.com/flawless-app-stories/ssl-pinning-254fa8ca2109 这篇使用 Swift 代码进行哈希计算的文章

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。