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

Using a self signed SSL certificate just for a web service

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

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

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

自签名证书的问题在任何情况下都是相同的,无论是浏览器还是非浏览器:它本身绝对不能保证任何事情。 SSL 的目的有两个:加密和身份验证。通常这两个方面都由 SSL 客户端 used/required 使连接真正被视为安全。

对于身份验证 ("who am I talking to?"),使用证书。要使用证书对您的对等方进行身份验证,您将必须拥有该证书的副本以与之进行比较,或者您将需要该证书的签名者的证书副本以将签名与之进行比较。如果两者都没有,则该证书不能提供任何保证。

含义:自签名证书很好如果客户端有该证书的副本并且可以信任他们从哪里获得证书的来源。如果你有一个非常狭窄的用例,其中每个要连接到您的 Web 服务的客户端都会事先与您联系(例如通过电子邮件),并且您可以向他们提供证书副本,以便他们安装到他们的本地信任库中,然后他们能够与您建立安全且经过身份验证的连接。

这对于具有任意随机访问者的典型网站是行不通的;这就是签名证书的用途,其中一个已经受信任的实体可以为迄今为止未知的第三实体提供担保。不过,它在供应商-客户场景中可能是可行的。

话虽如此,如今免费的证书非常便宜,可以为您的服务提供更多的可信度和专业性。

是的,证书可以是 issued for IP addresses

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

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

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