web-services - 仅为 Web 服务使用自签名 SSL 证书

标签 web-services ssl ssl-certificate self-signed

我有一个客户端将拥有的 Web 服务,我希望发送到服务器的数据经过加密。为了对此进行测试,我使用了自签名 SSL 证书。我知道当您使用自签名证书并且导航到使用它的任何地址时,网络浏览器会警告您它不安全等。

我想知道如果我在 Web 服务上线时使用此证书而不是经过验证的证书,是否会遇到任何问题?

此外,我没有服务器的域名,所以我将使用我的 ISP 提供的 IP 地址,使用证书这样做可以吗,因为无论我在哪里读到它们,人们都在谈论关于将它们与域名一起使用?

最佳答案

SSL 证书通常颁发给域并由颁发机构签署。当浏览器连接到服务器时,服务器将其证书提供给客户端。然后,客户端通过检查它正在访问的域是否与证书中提到的域相同来验证证书。此外,它还会验证其信任链。这意味着颁发者的证书也应该有效。如果颁发者不是根签名机构,则验证颁发者的颁发者证书。并且,最终应该信任根签名机构,这意味着根签名机构应该在您的信任库中。所有主要的签名机构,如 Verisign、Thawte 等,默认情况下都在 JDK trustore 中,因此,如果您拥有由他们签名的证书,那么您在验证信任链时就不会遇到问题。如果您的证书是由不受信任的机构签署的,那么您需要手动将颁发者的证书导入您的信任链。

现在,当使用自签名证书时,颁发证书的实体本身就是根签名机构。因此,证书应该手动导入到您的信任库中。您需要执行此操作才能通过 SSL 握手。但是仅此一项并不能解决您的问题。由于您没有使用任何域名,如果您通过 DHCP 服务器自动获取服务器 IP,则每次重新启动服务器时您的 IP 都可能会更改。如果是这种情况,那么一旦 IP 更改,即使是受信任的自签名证书也将无法使用。因为,证书是发给IP的,IP一变,证书就失效了。要解决这个问题,您需要从您的网络管理员那里为您的服务器获取一个静态 IP 地址。然后为您的静态 IP 生成一个自签名证书。然后要求您的客户将您的服务器证书添加到他们的信任库中。

这对您的客户来说有点乏味。但是,如果您有固定数量的客户端并且客户端计算机在您的控制之下,那么您可以自己将服务器证书添加到客户端信任库中。但是,如果您的服务器对所有人开放或拥有大量客户端,那么我建议您获得由知名且受信任的证书颁发机构签署的证书。同样,除非您的服务器获得域名,否则无论谁签署您的证书,您仍然需要一个静态 IP。

关于web-services - 仅为 Web 服务使用自签名 SSL 证书,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31718226/

相关文章:

c# - 为什么这个静态构造函数没有被调用?

c# - Web 服务中的数据库访问

oracle - 节点 odbc SSL 支持

java - 如何在java中禁用证书验证

java - 由于 Boxfuse Dev VM 上的 SSL 错误,Spring Boot 应用程序未启动

curl - 错误 : The certificate of `raw.githubusercontent.com' is not trusted

ssl - 配置代理的 get_server_certificate() 的替代方法

web-services - DHL样本跟踪号

c# - 发送到 Web 服务的对象包含 "null"属性

azure - Terraform - Azure 应用程序网关与 keyvault 证书集成问题