我最近开始担任系统操作工程师。但是,我仍然缺少很多基础知识,特别是有关 SSL/TLS 证书及其与 DNS 的关系的知识。
以下是用例:
- 我们合作的一家公司有自己的网站和域名,以及自己的 SSL 证书。我们将其域名称为“我想在这里使用的”data.example.com
- 我们拥有自己的网站和域名,并拥有自己的 SSL 证书。我们将在此处调用我想要使用的域名ourdata.ourexample.com
- 我们打交道的公司想要的是,当你去https://data.example.com,你实际上得到的是https://ourdata.ourexample.com
对此,我理解有两种可能性:
- (对我来说很清楚)通过 nginx/apache 在 Web 服务器级别创建重定向:这意味着两个域仍然有自己的 SSL 证书,但这只是在配置文件中写几行的问题,与任何 DNS 配置无关。
- (这对我来说开始变得复杂了)要求与我们打交道的公司向我们提供 CSR 信息(https://en.wikipedia.org/wiki/Certificate_signing_request),以便我们可以从用于生成自己的 SSL 证书的私钥生成 CSR 文件……?然后我们移交 CSR,他们支付自己的 SSL 证书。然后他们可以创建一个新的 CNAME,它将重定向data.example.com。到ourdata.ourexample.com。。我被告知 CSR 是一种公钥,这就是为什么我们可以轻松地将其交给其他人。但即使这个描述正确地描述了这个过程,我真的不知道发生了什么,在哪里以及为什么这样做。
最后,我注意到,在我们这边生成 CSR 并创建 CNAME 的情况下,当我们转到https://data.example.com,我们看到的内容https://ourdata.ourexample.com浏览器中显示的 URL 保持不变https://data.example.com。我不确定这是否与某些 Web 服务器配置或 DNS“设置”有关。
我希望我所描述的内容比较清楚。如果不清楚,请告诉我,我会尝试提供更多详细信息。
注意:我已经尝试找到这个问题的一些答案,但是虽然我已经理解了一些事情,但仍然不是 100% 清楚。
谢谢,SilentSib
答案1
我认为data.example.com
将托管于你的场所,并且example.com
不希望他们的客户看到您正在提供服务。
如果是这种情况,你只需要两个 Apache虚拟主机或者两个 nginx虚拟服务器配置为提供相同内容。
那么证书呢?如果你理解了以下概念,那就不太复杂了公钥加密。
基本上(在最常用的算法之一中,RSA),您有两个密钥A
和B
。使用加密的数据A
只能使用B
(A
无法解密)解密,反之亦然。您分发其中一个并调用它公钥,另一个是秘密的,称为私钥。公钥用于加密只有您可以解密的数据,私钥也可以用于签名:通过使用私钥加密预先约定的字节序列(例如,消息的哈希值),其他所有人都可以解密它并验证您是否拥有私钥。
其他部分公钥基础设施是:
- 证书:包含你的公钥、域名和其他一些数据的文件,由受信任的私钥(其公钥由每个浏览器分发和信任)。只有域名在证书上,而不是任何其他数据
DNS
(好吧,如果您愿意,可以要求将您的 IP 地址添加到证书中),因此当出现任何变化时您不必更改它们。 - CSR:与证书几乎相同。它包含您的公钥、您的域名和一些其他数据,由您的私钥(以表明您有密钥)。实际上,证书颁发机构只使用 CSR 中的公钥,有时也使用域名(如果他们不从 HTML 表单中获取)。
私钥很便宜(在繁忙的服务器上只需几秒钟即可生成)。您的客户端不太可能对data.example.com
和使用相同的私钥example.com
(除非他们在同一证书上拥有两个名称)。因此:
- 如果您的客户已经拥有 的证书
data.example.com
,请他们以安全的方式向您发送证书和相应的私钥。他们将不再使用它们, - 如果您的客户端没有证书
data.example.com
,请生成新的私钥并进行认证。不使用您其他域名的私钥。通常,即使在续订证书时也会生成新的私钥。如果您使用ourdata.example.net
相同的证书,每个人都会看到谁在提供data.example.com
服务。 - 您还可以使用让我们加密如果您的客户同意他们的条款。这样,您可以在几秒钟内获得有效证书,且无需支付额外费用。