许多公司的Intranet网站无法通过Internet访问。通常,他们只是使用自签名证书,这会给用户带来不良习惯,因为他们习惯于对无效的CERT警告只按OK。使用“加密”的网站? LTS Web浏览器是否将“让我们加密为CA”?

这不是隐私问题,像my-company-private-intranet-site.com这样的私人域名可能会泄漏吗?

评论

应该教会员工将公司的自签名证书导入其浏览器的受信任存储区。这样就不会养成在网站上单击“确定”的不良习惯。

我同意@RoraZ,如果它是他们的计算机,并且他们必须通过VPN进行远程连接。但是,如果它是办公室中的计算机,我们会生成一个自签名的根CA来信任我们的证书,将其导入到他们计算机上的受信任存储中,并且我们的员工像任何其他HTTPS站点一样与之交互。我们的员工也不太熟练。尝试和他们讨论整个过程实在是浪费时间。

此外,您为什么要使用面向公众的域名访问面向私有网站的网站?不仅没有必要,而且还可能根据网络/防火墙/ dns配置在外部路由内部流量。

我对RoraZ的建议感到有些震惊。您不希望用户安装自己的证书。在那乞求灾难。

我认为RoraZ表示已使用ssl证书签名的campany的CA证书,而不是实际的自签名ssl证书。

#1 楼

让我们加密只能颁发有效DNS名称的证书。因此,如果您的Intranet使用虚构的域名(例如intranet.mycompany.local),那么它将无法正常工作。

如果您拥有真实的DNS名称(例如intranet.mycompany.com)(即使它不能从外部解析到您的Intranet) ,则可以使用“让我们加密”为其颁发证书。如果该域确实从外部解析为可以在端口80上进行响应的服务器(如果您具有水平分割DNS,则该端口实际上不必属于Intranet的一部分),则可以使用http-01质询。或者,您可以使用dns-01质询(在Certbot 0.10.0和更高版本中以及在其他客户端(如脱水,getssl和acme.sh)中完全受支持)。由于这项挑战是通过配置DNS TXT记录来解决的,因此您无需将A记录指向公共IP地址。域名确实需要在您控制下的公共DNS中存在。

由于Chrome的要求,让我们的Encrypt(通常是受公共信任的证书颁发机构)将所有已颁发的证书提交到公共证书透明性日志中。因此,如果您获得Intranet(子)域名的证书,则不应期望它保持机密。无论如何,您的Intranet的安全性都不应依赖于对其域名保密。

评论


您至少需要短暂地使其解决...

–Ángel
16年4月25日在21:15

如果您使用dns-01挑战,则不会。

–约翰·莫拉汉(John Morahan)
16-4-26的7:32

如果您的Intranet安全性取决于其域名是秘密,那么您要做的功课要大得多。

– Lie Ryan
16/12/22在2:13

我以为我没有暗示其他意思,但是您评论的投票使我确信我错了:)所以,编辑。

–约翰·莫拉汉(John Morahan)
17年12月17日在0:16

谢谢!这使我找到了有关如何利用dns-01的有用文章! dev.to/michaeldscherr/…

– Kiradotee
20 Jun 30'17:47



#2 楼

如果您正在为Intranet寻找类似于内部CA的服务,则像Lets Encrypt之类的公共CA可能无法工作,因为它想重新连接到其服务器以管理证书请求和签名。这假定您没有从Intranet Web服务器访问Internet的权限;您需要在Web服务器上安装客户端以使其与Lets Encrypt服务进行通信。


他们如何使用Let's Encrypt为HTTPS网站生成CERT?


LE为此有专门的客户。请参阅工作原理。


LTS Web浏览器是否具有让我们加密为CA的功能?参见https://github.com/letsencrypt/letsencrypt#disclaimer。他们确实在以下站点上拥有公共证书:https://letsencrypt.org/certificates/

让我们回到您的要点,这是发布浏览器认可的SSL证书,该证书不会生成警告。正如RoraZ建议的那样,您需要让用户导入公司的自签名证书,以消除重复出现的浏览器警告,并防止用户养成仅接受无效证书的习惯。

我们使用OpenSSL允许我们充当自己的证书颁发机构,生成了所有用户都必须导入的根CA,从而使我们能够生成将被所有员工浏览器自动接受的任何其他证书,或依赖SSL的任何服务。这不同于仅根据需要导入自签名证书。您实际上是在创建根CA证书,并将其导入。今后,您可以为该CA颁发的不同通用名称颁发任意数量的证书,并且这些证书通过您自己的私有根证书颁发机构有效且受信任。

用于创建和管理自己的证书颁发机构,请参见http://www.flatmtn.com/article/setting-openssl-create-certificates

评论


谢谢,这是一个很好的答案。您能否快速介绍一下将证书导入浏览器的要点?我认为Linux和Windows系统可能有所不同。我的猜测是,在Linux上,它将在系统级别而不是浏览器上发生。

–r0berts
17年1月23日在9:00

很好的问题。我更喜欢将最终的证书文件放在根文档文件夹中,以便您可以简单地将链接发送给同事EG example.com/myrootca.crt。在Windows上,您只需在浏览器中打开链接,然后按照导入提示进行操作。对于Linux,则有所不同。参见unix.stackexchange.com/questions/90450/…

–罗德里戈M
17年1月29日在13:50

#3 楼

更新2019-03-30:有人实际上找到了对内部服务器进行LE的大规模方法:https://blog.heckel.xyz/2018/08/05/issuing-lets-encrypt-certificates-for-65000-internal -servers /

——————--


如何使用“让我们加密”为其HTTPS网站生成CERT?


一点也不。这仅适用于公共场所。当LE提出询问时,您需要一台可以回答DNS名称的服务器。现在,如果您已配置DNS服务器以根据实际提出问题的人提供不同的答案-来自内部或外部的人,又称Split-Brain DNS –然后您可以将验证请求重定向到所需的任何主机。-但这不是LE真正为您提供帮助的用例。相反:2015年,我们的明确意图是:经常更改我们用来验证的IP的集合。”-因此,您几乎不可能仅将防火墙上LE验证主机的IP列入白名单,因为这些IP可能会经常更改。 br />
LTS Web浏览器是否将Let's Encrypt作为CA?


是的。是著名的,公认的CA。 (即IdenTrust。)因此,所有信任旧CA的客户端也将立即信任新的Let's-EncryptCA。

评论


@techraf:是的。但是,如果要获得证书,您必须将该站点公开(即使是短暂的),那么我将对“我可以为无法访问的站点获得证书吗”的问题回答“不”。 -和链接中的评论者说的一样:“如果私人名称在验证时是公开的,仍然可以通过ACME获得证书” –我不知道LE是否已经允许仅DNS应用程序。然后,您可以解决这个问题。即使我认为您所谓的私有DNS名称仍然会出现在公共证书透明日志中。

– StackzOfZtuff
16-4-22在6:09



@techraf:我同意。我工作但是我认为这是一个hack。 LE并非专门为此目的而设计的。相应地将我的帖子更改为。

– StackzOfZtuff
16年4月22日在6:24

@techraf:已更新。另外:我喜欢约翰·莫拉汉对此的回答。

– StackzOfZtuff
16-4-22在6:47



您不一定需要精美的DNS配置即可根据谁提出来进行不同的回答。如果您将Intranet VPN配置为支持内部DNS,则配置为通过常规外部DNS指向真实的Intranet,通常由您的注册服务商运行,该注册商配置为指向您信任的可公开访问的服务器,以处理域验证,那么通过域控制验证,然后可以将证书转移到Intranet。

– Lie Ryan
16-4-22在12:33



#4 楼

为了获得适当的解决方案,您可以在网络上运行自己的boulder实例,即Letencrypt服务器部分。然后,如果它们支持使用不同的ACME url,则可以将所有正式和非正式的客户端与自己的ACME-Server一起使用(正式的url,其他人则需要在其文档或源代码中查找它们)。 />然后您需要使用服务器将CA证书导入客户端的信任存储中。选择,您可以使用更简单的工具,例如easy rsa。

#5 楼

建议将内部名称放在公共证书颁发机构中的人们应该查看公共证书透明性日志,并了解这会将有关内部系统名称的信息泄漏到Internet

https://blog.appsecco.com/certificate- transparent-part-3-the-dark-side-9d401809b025
https://www.ssl.com/faqs/questions-about-certificate-transparency/

我建议您阅读可能的解决方案。最好的解决方案是在组织中实施您自己的公钥基础结构(PKI)。这样可以避免您的内部主机出现在由公共CA维护的CT日志中。

另一件事是潜在的攻击者必须发现,不公开自己的姓名会给您带来更大的困难。

#6 楼

只要您拥有真实的域,并且不希望将其用于本地主机或内部网络IP之类的域,就可以在公共Internet上生成一个,指向一个空白系统,然后使用rsync或类似方法将其传输到您的Intranet。

您现在甚至可以明显获得通配符,因此*.internal.yoursite.extension可以工作。显然,对于像microsoft.com这样的欺骗网站是没有用的。 org。

评论


域名的最后一个标签不是“扩展名”。这是一个TLD。下次要进行混淆时,请使用RFC2606。

–帕特里克·梅夫克(Patrick Mevzek)
18年4月13日在22:54

#7 楼

我发现本文对于在我的私有服务器(无公共访问网站)的服务器上实施证书非常有用-https://dev.to/michaeldscherr/lets-encrypt-ssl-certificate-via-dns-challenge-8dd
该指南使用Apache,但这是一种非常灵活的方法(我使用的是Nginx)。创建证书后,只需将使用它们的配置指向其位置即可,这应该可以解决问题。
这是实现部分:

...
设置

本文的其余部分将讨论DNS挑战方法。
在下面的示例中,我将按照本指南使用Apache&Ubuntu 16.04。要查找特定Web服务器/
操作系统的文档,请转到certbot的主页。
首先,我们需要安装certbot及其所有必需的依赖项。
# run as root

apt-get update \
    && apt-get install software-properties-common \
    && add-apt-repository -y universe \
    && add-apt-repository -y ppa:certbot/certbot \
    && apt-get update \
    && apt-get install -y python-certbot-apache

配置
这里我不会遍历通配符域,但是可以选择。请参阅其文档。
我们现在需要告诉certbot我们要为其颁发证书的域。请记住要分别添加每个子域。
由于每个服务器可能有多个虚拟主机,所以我们决定使用
--manualcertonly标志。 br />一旦您运行上述命令,它将提示您为每个指定的域添加DNS TXT
记录。看起来像这样:
# run as root

# replace with your domain
# add all relevant subdomains
certbot --manual --preferred-challenges dns certonly \
    -d yourwebsite.com \
    -d www.yourwebsite.com \          # don't forget www binding
    -d staging.yourwebsite.com \      # example subdomain
    -d staging.stage1.yourwebsite.com # example long subdomain

现在这是重要的部分。您需要从每个记录名称中删除基本URL,如下所示:
一旦添加DNS TXT记录,然后分别在每个挑战提示中单击“继续”,则验证将通过。
Please deploy a DNS TXT record under the name
_acme-challenge.yourwebsite.com with the following value:

[random-string-of-characters]

Before continuing, verify the record is deployed.
(This must be set up in addition to the previous challenges; do not remove,
replace, or undo the previous challenge tasks yet. Note that you might be
asked to create multiple distinct TXT records with the same name. This is
permitted by DNS standards.)

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Press Enter to Continue

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

更新您的VHost

现在我们有了有效的证书,我们可以更新我们的vhost:
Press Enter to Continue
Waiting for verification...
Cleaning up challenges

IMPORTANT NOTES:
 - Congratulations! Your certificate and chain have been saved at:
   /etc/letsencrypt/live/yourwebsite.com/fullchain.pem
   Your key file has been saved at:
   /etc/letsencrypt/live/yourwebsite.com/privkey.pem
   Your cert will expire on 2019-04-24. To obtain a new or tweaked
   version of this certificate in the future, simply run certbot
   again. To non-interactively renew *all* of your certificates, run
   "certbot renew"
 - If you like Certbot, please consider supporting our work by:

   Donating to ISRG / Let's Encrypt:   https://letsencrypt.org/donate
   Donating to EFF:                    https://eff.org/donate-le

然后重新启动Apache:
# inside the 443 binding

SSLEngine On
SSLCertificateFile /etc/letsencrypt/live/yourwebsite.com/cert.pem
SSLCertificateKeyFile /etc/letsencrypt/live/yourwebsite.com/privkey.pem
SSLCertificateChainFile /etc/letsencrypt/live/yourwebsite.com/chain.pem

奖金:设置自动续订

我们将利用root用户的crontab自动续订
即将到期的证书。
sudo apachectl configtest

# if syntax ok
sudo apachectl restart

,然后在底部添加以下两行:一周。然后,我们仅根据需要使用--deploy-hook重新加载apache。