【问题标题】:Building a secure web service without buying (and renewing) a certificate无需购买(和更新)证书即可构建安全的 Web 服务
【发布时间】:2011-12-28 19:37:31
【问题描述】:

目标:一个安全的网络服务,将由两个客户端调用,两个客户端都在本地网络之外。保护 Web 服务最明显的方法是通过 https,从某个 CA 获取证书。问题是,这是一种愚蠢的浪费金钱。 CA 的全部意义在于它是一个公众信任的权威,所以我不必向每个想要使用我的网页的人验证我的身份,CA 正在为他们做这件事。但是,当我与极少数知名客户而不是广大公众打交道时,我不需要任何人为我担保。我们可以通过自己的渠道进行验证。

有没有办法做到这一点?理想情况下,我可以使用调用我的服务的人认可的证书来操作 https,如果没有其他人认为证书是有效的,我不在乎。无论如何,我不希望他们调用此服务。这应该是 B2B 数据传输(固定端点通信,而不是用于公共消费的服务)中相当普遍的需求,如果您正在传输实际文件,这很容易做到(PGP 风格的加密让您可以简单地验证和导入直接用对方的钥匙)。但我不清楚网络会话是否可以做到这一点。它肯定应该是,如果不是。我找到了一些自签名证书的文档,但它们似乎都仅用于开发目的,或仅供内部使用,并且很快就会过期或需要在同一个网络上。

有没有好的方法来实现这一点?还是我将不得不加密 Web 服务调用的内容?后者不太理想,因为它需要此服务的用户向他们的客户端应用程序添加加密代码(假设他们在一个平台上构建这些代码,该平台可以轻松添加对常见加密例程的支持,这可能是也可能不是true) 而不是仅仅依赖于标准的 https 框架。

我在 Windows (IIS/ASP.NET) 平台上工作,如果这有什么不同的话。

【问题讨论】:

    标签: web-services iis https web


    【解决方案1】:

    创建您自己的 CA 并生成自签名证书是可行的方法。没有理由它们必须仅用于开发或很快到期。您将掌控一切。

    当我在 Java 环境中实现此功能时,我发现最有用的资源是 Baban's Weblog。您可能会找到与您的 IIS 环境更相关的资源。

    【讨论】:

    • 好吧,这听起来不错,但你知道如何真正做到这一点吗?就像我说的,我能找到的所有文章都提到了仅限开发的证书,或者似乎在谈论设置一些企业 CA 并颁发仅在本地工作的证书。我需要从我们网络之外的系统访问它。
    【解决方案2】:

    要提供安全服务,您不需要任何证书,只需要一个 https 链接。您是对的,就您而言,证书对您没有任何作用。如果您的访客坚持要证书,那么我会支持@sudocode 的回答。

    【讨论】:

    • 这不是说从这里到那里不需要汽油,只需要一辆车吗?我很确定证书交换是 TLS(以及 https)会话如何工作的定义的一部分。我错了吗?
    • 为一个出色的明喻点赞 :-) 但你不需要证书。
    • 谢谢。 :) 但我仍然不明白这是怎么可能的。 HTTPS 是 HTTP+SSL/TLS。来自维基百科对 TLS 的描述:
    • [Client+server] 通过使用 [a handshake] 来协商 [a connection] ... [This] 开始于 client...presents...ciphers 和 hash 函数。 ...[T]服务器选择最强的...服务器以数字证书的形式发送...其[ID]。...客户端可以联系[CA]并确认...证书... ...[T]客户端使用服务器的公钥加密一个随机数...从[this],两者...生成密钥材料...[用于连接]。如果 [任何步骤] 失败...连接未创建。
    • 换句话说,证书的使用似乎是 TLS 定义所固有的,这就是 HTTPS 所使用的。
    【解决方案3】:

    我们的旧授权服务使用证书,但在重建它时,我们摆脱了证书并为服务采用了 Amazon ec2 样式的安全性。

    【讨论】:

    • 我没用过EC2,那会是什么安全机制?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-21
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    • 2020-10-03
    相关资源
    最近更新 更多