使用自签名证书加密 Web API 连接是否实用?
Is it practical to use self signed certificate to encrypt connection for Web API?
我们 RESTFul Web Api 使用 OAuth2 进行身份验证。使用自签名证书进行 SSL/TLS 加密是否可行?我们提供 .Net/Java SDK,其中将忽略非可信 CA 颁发的证书验证错误,因此客户不会看到任何错误,除非 he/she 尝试直接调用 Api来自 HTTP 请求。这个解决方案在我们看来不错,但有什么风险或缺点吗?
证书的验证是为了确保客户端正在与预期的服务器对话,即身份验证。 验证是防御中间人攻击的重要组成部分,即防止攻击者在流量路径中嗅探和修改数据。
因此,虽然您可以使用自签名证书而不是 public 最受信任的 CA 签名的证书,但您仍然需要正确验证证书并且 而不是简单地禁用验证。 对于自签名证书,这可以通过检查证书的指纹或其 public 密钥是否符合预期来完成。仅仅检查证书的主题是不够的,因为攻击者可以轻松地创建具有相同主题的证书并在攻击中使用它。
有关如何正确执行此操作(包括示例代码)的更多信息,请参阅 OWASP: Certificate and Public Key Pinnning。
我们 RESTFul Web Api 使用 OAuth2 进行身份验证。使用自签名证书进行 SSL/TLS 加密是否可行?我们提供 .Net/Java SDK,其中将忽略非可信 CA 颁发的证书验证错误,因此客户不会看到任何错误,除非 he/she 尝试直接调用 Api来自 HTTP 请求。这个解决方案在我们看来不错,但有什么风险或缺点吗?
证书的验证是为了确保客户端正在与预期的服务器对话,即身份验证。 验证是防御中间人攻击的重要组成部分,即防止攻击者在流量路径中嗅探和修改数据。
因此,虽然您可以使用自签名证书而不是 public 最受信任的 CA 签名的证书,但您仍然需要正确验证证书并且 而不是简单地禁用验证。 对于自签名证书,这可以通过检查证书的指纹或其 public 密钥是否符合预期来完成。仅仅检查证书的主题是不够的,因为攻击者可以轻松地创建具有相同主题的证书并在攻击中使用它。
有关如何正确执行此操作(包括示例代码)的更多信息,请参阅 OWASP: Certificate and Public Key Pinnning。