【问题标题】:Caching in-app purchase receipt validation certificates on Windows 8在 Windows 8 上缓存应用内购买收据验证证书
【发布时间】:2013-10-05 06:17:34
【问题描述】:

在单独的服务器上验证 Windows 8 应用内购买收据时,我对 Microsoft 推荐的做法有点困惑。

This 文档页面显示了验证收据时的方法。我发现令人困惑的是获取和存储用于验证收据的证书。在某些时候,在检索用于验证的 SSL 证书时,文档会说明以下内容:

// Retrieve the certificate from the official site.
// NOTE: For sake of performance, you would want to cache this certificate locally.
//       Otherwise, every single call will incur the delay of certificate retrieval.

这个缓存建议让我感到困惑。证书是从使用来自收据本身的参数构建的 URL 中检索的,看起来像这样:

https://go.microsoft.com/fwlink/?LinkId=246509&cid={0},

其中{0} 代表直接取自收据的证书ID。但如果我应该缓存它,那么任何后续收据验证都会忽略新收据中所述的证书 ID。这使我认为 Windows 8 上的所有收据必须根据相同的证书进行验证,具有相同的、永不更改的 ID(它似乎是 b809e47cd0110a4db043b3f73e83acd917fe1336)。这个假设正确吗?我是否可以在第一次请求后安全地缓存证书,然后忽略收据中的所有后续证书 ID?

【问题讨论】:

    标签: .net windows-8 in-app-purchase certificate windows-store-apps


    【解决方案1】:

    事实上,您必须使用其 ID 作为缓存键来缓存每个证书。每次遇到新的证书 ID 时,都必须将其添加到缓存中。

    例如,您可以构建磁盘缓存。在这种情况下,certificateId 将用作 FileName: - 检查本地缓存目录中是否存在与证书 ID 匹配的文件 - 如果确实存在,则从本地磁盘上的文件中加载证书 - 如果不存在下载它,然后将其保存到本地缓存目录

    显然,您可以使用 AppFabric 缓存或内置 Asp.Net 缓存功能(或类似技术)做更复杂的事情。

    【讨论】:

    • 嗯,非常有道理的一点,我很惊讶它没有引起我的注意。但是,我想专门使用内存缓存,但是如果证书的数量和累积大小太大,这是不可行的。但是到底有多少证书呢?不可能有那么多问题。真正的问题是缓存失效 - 我怎么知道证书没有同时更改,即如果缓存版本与原始版本相同,而不检索整个证书?微软似乎没有为此提供简单的方法。因此,缓存似乎有风险。
    • 证书数量多不好说,但如果不可行,微软不会推荐缓存。
    • 关于证书,它不会改变,这也是他们提供通过其 ID 检索证书的原因。所以证书缓存没有问题。您可能想要做的唯一一件事是根据 CRL(撤销列表)验证证书,而 .net 拥有执行该操作所需的一切。关于内存缓存,您拥有 .net 4.0 (msdn.microsoft.com/en-us/library/dd997357.aspx) 的内置功能
    • 阅读您的 MSDN 帖子,我猜您错过了有关 X509 证书生命周期的一点。由权威机构颁发的证书永远不会被更改。它可能会在到期日期之前被吊销,但您必须验证的唯一解决方案是检查证书是否不在授权证书吊销列表 (CRL) 中。缓存不会改变任何东西。
    • 我刚刚检查了证书的性质,它似乎是: - 自签名 - 到期设置为 2036 年 11 月 11 日 - 没有设置吊销分发点(自签名证书似乎合乎逻辑) 我的猜测是他们非常有信心他们的私钥不会被披露并且他们不必撤销它。您可以在合理的时间(1 小时到 1 天之间)后使缓存过期,以避免使用已删除的证书。或者您可以异步检查它是否仍然存在于 Microsoft 服务器上。
    猜你喜欢
    • 1970-01-01
    • 2014-05-19
    • 1970-01-01
    • 2011-10-12
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    相关资源
    最近更新 更多