所以,我有一个WebAPI将PKCS#7文件返回给客户端。客户端被编写为C#PCL,因此可以在Xamarin iOS和Android项目中使用。
我的初始测试工作正常,因为我在单元测试中编码和解码,可以使用Pkcs库。似乎我找不到任何解码客户端数据的方法,因为我不知道任何与PCL一起工作的Pkcs库。
有人可以告诉我如何做到这一点?
答案 0 :(得分:2)
所以,我最终将我的项目切换到.netstandard 1.4并使用Portable.BouncyCastle来解码在服务器端创建的Cms。
这是我用来解码Cms的代码。我有点相信这也是在检查签名,因为在BouncyCastle中没有明确的方法可以通过框架代码,例如CheckSignature()来实现。
var cmsParser = new Org.BouncyCastle.Cms.CmsSignedDataParser(dataBytes);
var cmsSignedContent = cmsParser.GetSignedContent();
var contentStream = cmsSignedContent.ContentStream;
var memoryStream = new MemoryStream();
contentStream.CopyTo(memoryStream);
byte[] contentBytes = memoryStream.ToArray();
var decodedContent = Encoding.UTF8.GetString(contentBytes);
另外我添加了这个以验证签名者信息:
cmsParser.GetSignedContent().Drain();
var certStore = cmsParser.GetCertificates("Collection");
var signerInfos = cmsParser.GetSignerInfos();
var signers = signerInfos.GetSigners();
foreach (SignerInformation signer in signers)
{
var certCollection = certStore.GetMatches(signer.SignerID);
foreach (Org.BouncyCastle.X509.X509Certificate cert in certCollection)
{
var result = signer.Verify(cert);
if (!result)
{
throw new Exception("Certificate verification error, the signer could not be verified.");
}
}
}
我不能100%确定这是否是我需要做的全部,但我的客户将通过SSL进行通信,并且他们正在使用具有appId和客户端密码的HMAC身份验证,因此我可以不那么关心过境问题。我基本上转移了#34;许可证"文件,我想确保内容在客户端设备上保存后不被篡改。
如果有任何人对此有任何建议或疑虑,请告诉我。 感谢。
答案 1 :(得分:0)