【问题标题】:Is it possible to have SSL certificate for IP address, not domain name? [closed]是否可以拥有 IP 地址而不是域名的 SSL 证书?
【发布时间】:2011-01-03 20:34:15
【问题描述】:

我希望我的网站对静态内容使用像 http://192.0.2.2/...https://192.0.2.2/... 这样的 URL,以避免请求中出现不必要的 cookie 并避免额外的 DNS 请求。

有没有办法为此目的获得 SSL 证书?

【问题讨论】:

  • This question 可能感兴趣:您可以,但 IP 地址应位于 IP 地址类型的 SAN 条目中,而不是主题 DN 的 CN。
  • LetsEncrypt 不这样做。 """" x.x.x.x 是一个 IP 地址。 Let's Encrypt 证书颁发机构不会为裸 IP 地址颁发证书。"""
  • C/A 浏览器论坛提供了一套发布策略。显然,紧随其后的是浏览器。 CA/B 不再允许 IP 地址。另一套发行政策由 IETF 维护。 IETF 的 PKI 称为 PKIX。 PKIX 允许 IP 地址。 PKIX 之后是大多数 [免费?] 软件,如 cURL 和 Wget。我不太清楚1.1.1.1 的证书。根据 CA/B 政策应该禁止。也许 CA/B 改变了他们的政策。
  • @jww:正如几个答案正确所说,CABforum 禁止 保留 IP 地址 - 主要是 RFC1918 和 RFC6598 中的私有范围以及其他一些,例如 127 用于 localhost 和示例在文档中。它们明确允许 公共 IP 地址;见BR 3.2.2.5。

标签: https dns ip-address ssl-certificate


【解决方案1】:

答案是肯定的。简而言之,它是一个主题备用名称 (SAN) 证书,其中包含您通常会在其中看到 DNS 条目的 IP。证书类型不限于公共 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 是什么?
  • 那是域,我已经编辑了代码以包含它。但是请注意,CN 在很大程度上是无关紧要的,因为我们正在尝试做的是为 IP 地址提供证书。我应该完全排除它。
  • 在 Ubuntu 20.04.3 中,我在 /usr/lib/ssl/ 中找到了 openssl.cnf,虽然结果是符号链接,但仍然是 openssl version -d 提供的位置。
  • 不管怎样,今天 Safari 警告证书无效但允许您继续,而 Opera 也认为它无效并拒绝继续。通过修改客户端的受信任证书列表可能会有解决方法。但叹息,SSL 浪潮继续收紧。
【解决方案2】:

这完全取决于颁发证书的证书颁发机构。

就 Let's Encrypt CA 而言,他们不会在公共 IP 地址上颁发 TLS 证书。 https://community.letsencrypt.org/t/certificate-for-public-ip-without-domain-name/6082

要了解您的证书颁发机构,您可以执行以下命令并查找下面标记的条目。

curl -v -u <username>:<password> "https://IPaddress/.."

【讨论】:

    【解决方案3】:

    C/A 浏览器论坛设置证书中的有效内容和无效内容,以及 CA 应该拒绝的内容。

    根据他们的Baseline Requirements for the Issuance and Management of Publicly-Trusted Certificates 文档,自 2015 年起,CA 不得颁发公用名或公用备用名字段包含保留 IP 或内部名称的证书,其中保留 IP 地址是 IANA 列为保留的 IP - 包括所有 NAT IP - 内部名称是任何无法在公共 DNS 上解析的名称。

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

    【讨论】:

      【解决方案4】:

      是的。 Cloudflare 将其用于其 DNS 说明主页:https://1.1.1.1

      【讨论】:

      【解决方案5】:

      简短的回答是肯定的,只要它是公共 IP 地址。

      不允许向保留 IP 地址颁发证书,并且从 2016 年 10 月 1 日起,之前颁发给保留 IP 地址的所有证书都已被吊销。

      根据 CA 浏览器论坛,IP 地址证书可能存在兼容性问题,除非 IP 地址在 commonNamesubjectAltName 字段中。这是由于旧版 SSL 实现不符合 RFC 5280,尤其是 Windows 10 之前的 Windows 操作系统。


      来源:

      1. Guidance on IP Addresses In Certificates CA 浏览器论坛
      2. Baseline Requirements 1.4.1 CA 浏览器论坛
      3. The (soon to be) not-so Common Name unmitigatedrisk.com
      4. RFC 5280 IETF

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

      【讨论】:

      • 不正确,globalsign 仍然为 IP 颁发证书。证书颁发机构/浏览器论坛不喜欢在证书中看到私有 IP,但不反对公共 IP。
      • 看来我的信息可能已经过时了。如果你是正确的,我会进一步研究它,然后编辑它。
      • 不是真的,看看1.1.1.1 他们在 2019 年获得了 IP 的 SSL 证书,有效期至 2021 年来自 DigiCert
      • @bronzeman 这是一个公共 IP 地址,是的,您可以获得它的证书。唯一不能颁发证书的地址是en.wikipedia.org/wiki/Reserved_IP_addresses
      • @DustWolf,根据 RFC 5280,“当 subjectAltName 扩展包含 iPAddress 时,地址必须以“网络字节顺序”存储在八位字节字符串中,如 [RFC791] 中所述。 ...对于 IP 版本 4...,八位字节字符串必须正好包含四个八位字节。”简而言之,您不能在 subjectAltName 字段中使用子网
      【解决方案6】:

      我猜答案是肯定的。例如检查this link

      向公共 IP 地址颁发 SSL 证书

      SSL 证书通常颁发给完全限定域名 (FQDN),例如“https://www.domain.com”。但是,某些组织需要向公共 IP 地址颁发 SSL 证书。此选项允许您在证书签名请求 (CSR) 中指定公共 IP 地址作为公用名。然后可以使用颁发的证书来保护与公共 IP 地址的直接连接(例如,https://123.456.78.99。)。

      【讨论】:

      • 它是否也适用于静态私有 IP?像局域网一样?
      • @Klaus Byskov Pedersen 您能否为我提供有关如何执行此操作的资源?
      • @ShivSingh 任何来源?我认为任何知名的 CA 都不会向私有 IP 地址颁发证书。
      • @reyhane 看看superuser.com/questions/630914/… 的概念,然后使用hashicorp vault 进行证书颁发机构生命周期管理和证书颁发:vaultproject.io/docs/secrets/pki
      【解决方案7】:

      根据this answer,可以,但很少使用。

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

      但是,在 IP 地址上运行网站以避免 DNS 查找对我来说听起来像是不必要的微优化。您最多可以节省几毫秒,即每次访问,因为 DNS 结果缓存在多个级别。

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

      【讨论】:

      • AFAIK,每分钟 1 次(Firefox DNS 缓存)和 IE 每 30 分钟 1 次。这与 DNS 记录的 TTL 不同。我也需要大约 20 毫秒,具体取决于域和 NS 服务器的速度(也将首先解决 :))我还想避免每个静态请求的冗长 cookie(我的 auth + Google Analytics cookie)。所以使用IP而不是购买单独的域是好的。顺便说一句,stackoverflow、basecamphq 对静态内容使用单独的域。改用 IP 也会删除不必要的 DNS 请求。
      • 我完全明白你对 cookie 的看法,你是完全正确的。但是切换到 SSL IP 以节省几毫秒的 DNS 查找对我来说听起来比它的价值更麻烦。另外,如果您不得不更改您的提供商,您可能无法随身携带您的 IP - 这可能是不可能的。移动域要容易得多,并且应该可以轻松地移动证书。
      • Google 的 Page Speed 工具始终建议“从与主文档 (xxxx.com) 相同的主机提供以下 JavaScript 资源,或者尽可能推迟加载这些资源”。我没有将 Page Speed 工具评为圣经,但无论如何这意味着 DNS 优化不是我发明的。我只是想尽可能将我的 Page Speed 清单设为绿色。
      • @Evgenyt:我不认为这是因为 DNS 查找,如前所述,它缓存在如此多的级别上,这不可能是性能问题。更有可能是让浏览器能够处理他们的请求。保持与主机的连接打开,从而避免设置额外的连接。
      • 我同意这个答案。此外,我们发现此类配置存在问题。事实证明,如果将 IP 地址用作证书目标,Android OS(4.4,5.0;适用于 4.0,4)上的 Chrome 浏览器(39.0.2171.93)不会通过 HTTPS 播放音频文件。我们曾经在我们的测试环境中使用这样的配置,但将开始使用域名。
      猜你喜欢
      • 2019-03-14
      • 1970-01-01
      • 2020-05-27
      • 2010-11-08
      • 2017-01-03
      • 2018-07-12
      • 2014-09-02
      • 2014-08-13
      • 2020-09-28
      相关资源
      最近更新 更多