是否可以为IP地址获得SSL证书,而不是域名?

453
我希望我的网站使用像http://192.0.2.2/...https://192.0.2.2/...这样的URL来获取静态内容,以避免请求中不必要的cookies,并避免额外的DNS请求。
是否有办法为此获得SSL证书?

3
这个问题可能会引起兴趣:您可以将IP地址放在IP地址类型的SAN条目中,而不是主题DN的CN中。 - Bruno
36
LetsEncrypt无法为IP地址颁发证书,其中x.x.x.x代表IP地址,Let's Encrypt证书授权机构不会为裸露的IP地址颁发证书。 - kommradHomer
2
C/A浏览器论坛提供一套发布政策。显然,浏览器会遵循这个政策。CA/B不再允许IP地址。另一套发布政策由IETF维护。IETF的PKI称为PKIX。PKIX允许IP地址。大多数[免费?]软件如cURL和Wget都遵循PKIX。我无法确定1.1.1.1的证书。根据CA/B的政策,它应该被禁止。也许CA/B改变了他们的政策。 - jww
4
正如其他答案所正确指出的那样,CABforum禁止保留IP地址,主要是RFC1918和RFC6598中的私人范围以及一些其他的范围,例如用于本地主机的127和文档中的示例。他们明确允许使用_公共_ IP地址;请参见BR 3.2.2.5。 - dave_thompson_085
7个回答

252

根据这个回答,这是可能的,但很少使用。

至于如何获得它:我会尝试向您选择的提供商订购一个,并在订购过程中输入IP地址而不是域名。

然而,仅仅为了避免DNS查找而在IP地址上运行站点听起来非常像不必要的微观优化。在最好的情况下,每次访问可以节省几毫秒,因为DNS结果被缓存在多个级别上。

我认为从优化的角度来看,您的想法是没有意义的。


13
据我所知,Firefox DNS缓存每分钟更新1次,IE每30分钟更新1次。这与DNS记录的TTL不同。 此外,这需要大约20毫秒的时间,具体取决于域名和NS服务器的速度(它们也必须首先解析:)) 我还想避免在每个静态请求中使用我的长cookie(我的身份验证+Google Analytics cookie)。因此,使用IP而不是购买单独的域名很好。 顺便说一句,stackoverflow和basecamphq为静态内容使用单独的域名。使用IP而不是域名将移除不必要的DNS请求。 - Evgenyt
19
我完全理解你关于饼干的想法,你是完全正确的。但是,为了节省几毫秒的DNS查询时间而切换到SSL IP对我来说似乎更麻烦,不值得这样做。此外,如果你必须更换服务提供商,可能无法携带IP,这可能会导致问题。移动域名要容易得多,并且应该可以相对容易地移动证书。 - Pekka
2
Google的Page Speed工具总是建议“从与主文档(xxxx.com)相同的主机提供以下JavaScript资源,或者如果可能的话延迟加载这些资源”。我并不认为Page Speed工具是圣经,但无论如何,这意味着DNS优化不是由我发明的。我只是尽可能地让我的Page Speed清单变绿。 - Evgenyt
14
我认为这不是由于DNS查找,因为如所述,DNS查找在许多层面上都被缓存,所以它不能成为性能问题。更有可能是为了使浏览器能够流水线式请求。保持与主机的连接打开,从而避免设置额外的连接。 - vdstw
7
我同意此答案。同时,我们发现了一个配置问题。原来,如果将IP地址用作证书目标,则Android操作系统(4.4、5.0;在4.0、4上可以正常工作)上的Chrome浏览器(39.0.2171.93)不会通过HTTPS播放音频文件。我们曾经在测试环境中使用这种配置,但现在会开始使用域名。 - ENargit
显示剩余12条评论

88
短答案是可以,只要它是公共IP地址。不允许向保留的IP地址颁发证书,并且自2016年10月1日起,先前颁发给保留IP地址的所有证书均被撤销。根据CA浏览器论坛的规定,除非IP地址同时在commonName和subjectAltName字段中,否则IP地址的证书可能存在兼容性问题。这是由于旧版SSL实现与RFC 5280不一致,特别是Windows 10之前的Windows操作系统。

来源:

  1. 证书中IP地址的指导 CA浏览器论坛
  2. 基线要求1.4.1 CA浏览器论坛
  3. (即将不再)常见名称 unmitigatedrisk.com
  4. RFC 5280 IETF

注意:本答案的早期版本声称所有IP地址证书将在2016年10月1日吊销。感谢Navin指出错误。

6
不准确,GlobalSign仍然会为IP颁发证书。证书颁发机构/浏览器论坛不喜欢在证书中看到私有IP,但对公共IP没有意见。 - Navin
1
看起来我的信息可能已经过时了。我会进一步调查,如果你是正确的话,我会进行编辑。 - regdoug
1
不是真的,请看 https://1.1.1.1。他们在2019年为IP获取了DigiCert的SSL证书,有效期至2021年。 - bronze man
2
@bronzeman 那是一个公共 IP 地址,所以你可以为其获取证书。唯一无法颁发证书的地址是 https://en.wikipedia.org/wiki/Reserved_IP_addresses。 - regdoug
1
@DustWolf:正如已经说明的那样,CABforum禁止使用保留IP地址,其中包括RFC1918范围10/8、172.16/12和192.168/16。 - dave_thompson_085
显示剩余2条评论

52

17
这并不完全是表面上看起来的。如果您检查证书,通用名称字段是cloudflare-dns.com,而1.1.1.1仅列在证书主题备用名称下。 - bitinerant
15
如果存在主题备用名称,则会忽略通用名称。实际上,通用名称已被弃用,只有备用名称才是真正相关的。 - Yogu

42
我猜答案是肯定的。例如,请查看此链接

向公共IP地址颁发SSL证书

SSL证书通常颁发给完全限定域名(FQDN),例如 "https://www.domain.com"。然而,一些组织需要将SSL证书颁发给公共IP地址。此选项允许您在证书签名请求(CSR)中指定公共IP地址作为公共名称。然后,发放的证书可以直接用于与公共IP地址建立安全连接(例如,https://123.456.78.99)。


6
静态私有IP地址也可以使用吗?比如用于局域网? - Mr Bonjour
@Klaus Byskov Pedersen,您能否提供一些关于如何做到这一点的资源? - reyhane
2
@ShivSingh 有任何来源吗?我认为任何知名CA都不会向私人IP地址颁发证书。 - Franklin Yu
@reyhane 请查看以下概念 https://superuser.com/questions/630914/can-i-be-a-root-certificate-authority-for-my-local-network,然后使用Hashicorp Vault进行证书颁发和生命周期管理:https://www.vaultproject.io/docs/secrets/pki - yurisich

32
答案是:
回答是肯定的。简而言之,它是一个包含通常会看到DNS条目的IP地址的主题替代名称(SAN)证书。 证书类型不仅限于公共IP地址-该限制仅由签名机构而非技术所强加。我只想澄清这一点。 我猜您实际上只是想在不付出为网站和设备提供DNS名称并支付CA每年或两年发行证书的成本和麻烦的情况下摆脱那个讨厌的不安全提示。 您不应该试图说服世界您的IP地址是一家值得信赖的网站,人们应该放心提供他们的付款信息。现在我们已经确定为什么没有声誉良好的组织想要发行此类证书,让我们用自签名的SAN证书自己做。在内部,我有一个已部署到所有主机的受信任证书,然后我使用它签署此类型的证书,所有设备都变得可信。 在此问题的范围之外进行此操作超出了问题的范围,但我认为它与讨论相关,因为问题和解决方案是相互关联的。简明扼要地说,这里是如何生成一个包含IP地址的单独的自签名SAN证书。将IP列表扩展到包括整个子网,并为所有内容使用一个证书。
#!/bin/bash
#using: OpenSSL 1.1.1c FIPS  28 May 2019 / CentOS Linux release 8.2.2004

C=US ; ST=Confusion ; L=Anywhere ; O=Private\ Subnet ; EMAIL=admin@company.com
BITS=2048
CN=RFC1918
DOM=company.com
SUBJ="/C=$C/ST=$ST/L=$L/O=$O/CN=$CN.$DOM"

openssl genrsa -out ip.key $BITS

SAN='\n[SAN]\nsubjectAltName=IP:192.168.1.0,IP:192.168.1.1,IP:192.168.1.2,IP:192.168.1.3,IP:192.168.1.4,IP:192.168.1.5,IP:192.168.1.6,IP:192.168.1.7,IP:192.168.1.8,IP:192.168.1.9,IP:192.168.1.10'

cp /etc/pki/tls/openssl.cnf /tmp/openssl.cnf
echo -e "$SAN" >> /tmp/openssl.cnf

openssl req -subj "$SUBJ" -new -x509 -days 10950 \
    -key ip.key -out ip.crt -batch \
    -set_serial 168933982 \
    -config /tmp/openssl.cnf \
    -extensions SAN

openssl x509 -in ip.crt -noout -text

很好的回答。但是$DOM是什么? - sekrett
1
那个域名,我已经编辑了代码以包含它。然而,CN在这里基本上是无关紧要的,因为我们试图为IP地址提供证书。我本应该完全排除它。 - Josiah DeWitt
在Ubuntu 20.04.3中,我发现openssl.cnf位于/usr/lib/ssl/中,尽管它实际上是一个符号链接,但仍然是由openssl version -d提供的位置。 - Heath Raftery
说句实话,今天Safari会警告证书无效但允许你继续,而Opera则认为它无效并拒绝继续。通过修改客户端的受信任证书列表可能有解决方法。但是,SSL的威胁仍在不断加强。 - Heath Raftery

8

6

C/A浏览器论坛制定了证书中有效和无效的内容,以及CA应该拒绝哪些内容。

根据他们的《公开信任证书的颁发和管理基线要求》文件,自2015年起,CA不得颁发常用名称或常用备用名称字段包含保留IP或内部名称的证书,其中保留IP地址是IANA列出的保留IP地址 - 包括所有NAT IP - 而内部名称是任何不能在公共DNS上解析的名称。

公共IP地址可以使用(基线要求文档指定了CA必须执行哪些检查以确保申请人拥有IP)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接