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 (将#修改为@)