Let's Encrypt是一个新的开源证书颁发机构,承诺以标准化,API可访问和非商业的方式提供免费的SSL证书。如果您以前安装了SSL证书,那么您可能熟悉使用某些付费提供商注册证书的过程,然后完成交换证书请求和已完成请求的手动过程。

我们的加密基于一组开放服务API,可以在任何平台上实现,并为包括IIS在内的Web服务器创建证书。这似乎是一个神话般的想法,因为如果您有任何经过身份验证的访问权限,那么保护您的网站是绝对必要的。现在基本的SSL证书甚至来自付费服务提供商都是相对便宜的,因此这不是一个问题,因为这是一个问题(我使用DnSimple)无论是域管理还是SSL证书,都可以完全自动化SSL创建和管理过程,这是一个巨大的胜利。这实际上有好处和缺点,我将在文章的最后讨论这个问题。要清楚 - 我不是网络管理员,我没有在大量网站上管理证书的丰富经验所以在这篇文章中我将介绍我在自己托管的自己网站上处理的一些基本方案服务器。

Windows和IIS - 不是一流的公民

我很感兴趣地关注了Let的加密开发,但最初没有太多尝试,因为没有直接可用于Windows的实现。上周,我遇到了Nik Molnar的帖子,该帖子指出了使用PowerShell,命令行甚至是基于Windows UI工具的Windows的一些可用工具。然后Nik继续描述一个Azure插件实现,它可以自动注册和续订Let的加密证书。

但是我对IIS片段而不是Azure更感兴趣,因为我不使用Azure并在IIS上使用主机,因此在周末我使用这些工具进行旋转,以了解让Let的加密与我的IIS站点一起工作的真正原因。这篇文章是我发现的内容的摘要。

 

什么在Windows上可用

与开放式工具的情况一样,在开放式网络和安全工具方面,Windows始终是事后的想法,而不是常态。因此,当Let's Encrypt最初进入测试阶段时,没有Windows支持。但是,现在它已经测试了一段时间,有一些工具可用于为自动化证书管理环境(ACME)API提供包装器。

有很多选择:

  • LetsEncrypt-Win-Simple
    目前,这似乎是最快速,轻松地将新证书安装到IIS中的最简单的解决方案。此Windows命令行实用程序包含一个“交互式”模式,可让您在服务器上选择主机带领的Web站点,然后创建证书并在一个无缝操作中将其安装到IIS中。这适用于手动安装或简单的脚本安装。它是快速简便的,也是迄今为止我尝试过的最简单的解决方案。

  • ACMESharp Powershell命令
    ACMESharp是一个Powershell库,可以访问ACME API的许多(但不是全部)命令。与使用ACMESharp库的Win-Simple方法不同,需要一些脚本编写,您必须使用某些逻辑编写自己,但是您可以对该过程以及创建和保存中间证书的能力进行大量控制。

  • Certify
    这是ACME API的GUI实现,承诺提供交互式ACME证书管理。目前这个工具非常粗糙,但改进即将到来,每个新版本似乎都有显着提升。这是一种可视化查看证书的好方法,对于那些不想使用大量命令行foo的人来说显然更容易。

需要说明的是,所有这些工具都处于非常早期的发布阶段,所以它们有点粗糙,缺少功能......这是可以预料的。这个东西是新的。让加密本身处于测试阶段,这些工具构建在该基础堆栈的顶部。但是,我仍然可以使用所有这些工具来注册证书,这样您就可以在自己的IIS网站上使用Let's Encrypt开始了。

目前所有工具中缺少的是管理。您无法撤消或删除证书,也无法清除远程服务器上的证书。在测试时,我最终达到了在我的一个站点上注册的证书限制,然后无法进一步使用该站点,因为我无法删除/撤销任何证书。Natch。

因此,我建议您计划使用这些工具,创建一个新的主机加盖的测试站点或具有有效的互联网可访问域名的站点,并在更新并将证书添加到您关注的任何实际站点之前使用该站点。一旦弄清楚工作原理如何,就可以轻松地在现场网站上安装证书。

简单方法:LetsEncrypt-Win-Simple

到目前为止,创建和安装新证书的最简单方法是LetsEncrypt-Win-Simple。此工具从命令行运行,并有一些非常容易理解的选项。基本上,您使用服务器上的主机标题从活动网站列表中选择一个站点,该实用程序将为您创建证书,创建一个https绑定并附加证书。如果已经有证书,则证书将替换为新证书。

该工具基本上包含了创建注册,域和证书的所有中间步骤。稍后再次运行时,它会使用现有存储来检索现有注册和域信息以运行续订。您不需要了解ACME API的工作原理或涉及的部分,这很好。实际上我希望我能像我一样深入研究下层工具之前先看看这个工具。

安装很简单:您可以从他们的GitHub版本页面安装最新版本,只需将zip文件解压缩到一个文件夹即可。该zip文件包含一个.NET可执行控制台应用程序和所需的SSH本机依赖项以及一些配置文件。

要运行它,只需打开命令窗口,CD到安装文件夹并运行:

LetsEncrypt

这是交互的样子(在我的家用机器上,我只添加了一个用于测试的主机端口网站):

LetsEncrypt赢即简单

(请注意,您在此处使用的网站必须可以访问Internet,并且您必须从将接收证书的计算机上运行这些工具)

如果一切顺利,您最终将在您指定的网站上的IIS中安装新证书。

SiteBindings

如果安装了现有证书,则将替换为新证书。该实用程序足够智能,可以检测现有的Let's Encrypt证书并删除旧证书并将其替换为新证书,只留下新证书。任何其他证书只是留在原地,但不是未绑定的。

 SNI - 每个IP地址多个SSL证书

请注意,默认情况下,IIS仅允许将单个SSL证书绑定到IP地址。从Server 2012 IIS支持服务器名称指示(SNI)开始,它允许您将多个SSL证书绑定到单个IP地址。为了使其工作,您需要确保使用相同IP地址的每个站点都检查了SNI标志,如上所示。SNI将证书绑定到主机头而不是IP地址。请注意,对于Windows XP上的旧版本IE,SNI支持无法正确导航SSL签名存在问题。如果这是一个问题,您将需要坚持IP绑定SSL证书。

如果您在Web浏览器中打开该站点,则可以通过单击安全图标并检查证书信息来快速检查证书是否正常工作。如您所见,证书是由Let's Encrypt创建的证书。

证书

有什么好处是你可以简单地重新运行LetsEncrypt,它会出去创建一个新证书并删除旧证书,所以在你需要更新/撤销它时,可以根据需要快速轻松地更新证书。

好极了!这个过程非常简单明了。LetsEncrypt-Win-Simple还有一些命令行选项,允许您自动化域以创建证书和禁用提示,以便您也可以自动执行此过程。顾名思义LetsEncrypt-Win-Simple很简单,不需要了解Let's Encrypt如何在幕后工作的血腥细节,除非你有超出注册的特定需求,这是去恕我直言的方法。

更新

LetsEncrypt-Win-Simple还包括一个可以轻松续订所有证书的界面。你可以运行:

LetsEncrypt --renew

并且它会检查它管理的所有站点的到期日期,如果过期(或在过期当天),它会自动续订并用新的证书替换旧证书。太好了!

该实用程序还会创建一个计划任务,每天运行一次此命令并触发更新请求。请注意,您可能必须按照此处所述调整任务用户身份设置以确保用户在运行计划任务时正确登录。请注意,该用户是登录用户,因为此工具在%appdata%\ letsencrypt-win-simple中创建Let's Encrypt保险库,这是一个特定于用户的配置文件。如果保险库位于像\ ProgramData这样的全球位置,那么它会更好,所以它可以在包括系统帐户在内的任何帐户下运行。但这是一个小问题。

 

使用ACMESharp和PowerShell进行更多控制

如果您希望直接使用较低级别的ACME API,并且您希望对证书创建过程进行细粒度控制,那么ACMESharp的Powershell命令行开关是一种很好的方法。它都基于.NET库,它为ACME API提供核心接口,因此您还可以自动化自己的应用程序。

LetsEncrypt使用一些核心概念:

  • 注册本质上是创建证书的实体(您或您的公司)
  • 标识符,即您要注册的域名
  • 与该域名绑定的证书

该过程涉及创建一次注册帐户,然后创建可注册的多个域。然后,每个域可以随时间具有与其关联的多个证书。

ACMESharp GitHub网站有一个关于如何开始的非常好的主题,我可以通过设置注册,设置域然后创建实际证书的过程。

预先警告 - 如果你正在进行更新,有很多步骤和步骤会改变 - 它并不像LetsEncrypt-win-simple那么简单,尽管你可以使用ACMESharp构建类似的东西(因为它使用了LetsEncrypt-win-simple) ACMESharp API)。ACMESharp是一个较低级别的工具,它提供了可以在其上构建的API表面。

但您可以相对轻松地使用Powershell界面来创建新证书和续订证书。通过这些步骤的过程会根据您是否在第一次安装时进行更改,您必须先创建初始注册和域,或者只需要在现有域注册中添加新证书。

经过相当多的临时域实验后,我最终得到了一个参数化的Powershell脚本,我现在用它来注册和更新域。除了说明之外,您可能会发现这很有用(对于一件事,如果您想手动执行这些步骤,则更容易剪切和粘贴)。

#install-Module -Name ACMESharp

import-module ACMESharp

$email = "mailto:rick@east-wind.com"
$domain = "codepaste.net" $alias = "codepaste" $iissitename = "codepaste.net" $certname = "codepaste$(get-date -format yyyy-MM-dd--HH-mm)" $pfxfile = "c:\Admin\Certs\$certname.pfx" $initializevault = $FALSE $createregistration = $FALSE $createalias = $TRUE # Change to the Vault folder cd C:\ProgramData\ACMESharp\sysVault # First time on the machine - intiialize vault if($initializevault) { Initialize-ACMEVault } Get-ACMEVault if($createregistration) { # Set up new 'account' tied to an email address New-AcmeRegistration -Contacts "$email" -AcceptTos } if($createalias) { # Associate a new site New-AcmeIdentifier -Dns $domain -Alias $alias # Prove the site exists and is accessible Complete-ACMEChallenge $alias -ChallengeType http-01 -Handler iis -HandlerParameters @{WebSiteRef="$iissitename"} # Validate site Submit-ACMEChallenge $alias -ChallengeType http-01 # check until valid or invalid - pending Update-ACMEIdentifier $alias -ChallengeType http-01 Update-ACMEIdentifier $alias -ChallengeType http-01 } # Generate a certificate New-ACMECertificate ${alias} -Generate -Alias $certname #Submit the certificate Submit-ACMECertificate $certname # Hit until values are filled in update-AcmeCertificate $certname pause # Export Certifiacte to PFX file Get-ACMECertificate $certname -ExportPkcs12 $pfxfile 

请注意,通过设置3个布尔值,您可以控制新证书和续订证书的流程。脚本在上面设置的方式运行以进行证书续订/更新。

此脚本生成一个PFX文件,然后可以将其导入IIS。还有一些工具可以将现有证书安装和更新到IIS中,但它看起来目前API中的一些更改使得这对我不起作用。我甚至无法获得加载工具。

您可以手动安装证书:

certutil -importPFX "c:\admin\certs\codepaste2016-02-28--20:22" –p password

或者从IIS管理控制台和“IIS证书”部分手动导入它。这适用于首次安装,但如果您需要更新现有证书,则仍需要使用管理控制台或命令行工具交换IIS中的证书。

 

Certify - 让我们在制作中加密GUI

(2016年3月10日更新)

Certify是一个基于可视GUI的工具,它也基于ACMESharp库,并为证书操作提供可视化管理界面。这个工具目前处于Alpha状态,而且非常粗糙 - 事实上,几周前我最初尝试使用它时,实际上无法获得创建证书。然而,最近有一个更新,即使UI仍然有点粗糙,现在已经有了基本功能。

Certify UI几乎反映了Vault的术语,联系人(真正的电子邮件)以及域和证书,​​UI反映了这种层次结构。您可以创建新域,然后将新证书附加到每个域。您还可以使用此UI更新,导出证书并将其直接应用于IIS Web站点绑定。

该工具允许您创建新的电子邮件联系人,然后允许您以交互方式添加域和证书。您可以颁发新证书。证书需要一分钟左右才能生成,目前您必须刷新Vault以查看更新的,经过验证的证书。验证后,您可以使用“自动应用”选择要将证书绑定到的网站和端口。您还可以将证书导出到.pfx文件,并且可以随时要求使用Certify续订证书。

这个工具显然处于Alpha阶段,虽然它还没有工作,但很高兴看到这个用户界面。拥有已安装证书的可视视图并一目了然地查看证书状态可能很有用。根据证书的到期状态看到不同的颜色会很高兴(红色表示过期,橙色表示几周,绿色表示有效)等。拥有一个能够一目了然地查看所有内容的UI非常好。

继续关注这个工具。

我们在哪?

免费和开源SSL证书的想法肯定会在正确的时间到来,因为我们正在考虑谷歌和其他大型互联网公司的大力推动,试图在每个互联网连接上强制执行SSL。运行SSL可以通过加密内容和标头来帮助防止许多HTTP,XSS和man处于中间类型攻击。尽管SSL证书已经变得更便宜,但是使用简单且“官方”的方式来创建SSL证书会增加SSL使用率。我知道我有一些小型项目网站,我无法证明每年花费20美元用于SSL,但如果它是免费的 - 嘿,为什么不是。

它不仅仅是关于免费证书 - 证书生成可以完全自动化的事实也特别适用于那些拥有大量站点和证书的人。能够每天检查一次证书到期,并在一天之内更新,以保持最新状态,这样可以减少一件事情。

我在工具的当前状态下看到Let's Encrypt的一个问题是证书有效期最长为90天或3个月。这意味着您需要比典型的1年证书更频繁地管理续订。如果证书过期,我们假设加密应该有邮件通知,但由于未来的过期太远,我还没有尝试过。更新过程的自动化将成为关键 - 没有人希望手动更新证书,甚至每3个月通知一次。我今天在我的Web服务器上有5个证书,甚至一年到期都是一个很大的麻烦,因为这些证书在一年中的不同时间到期。对我而言,自动化方面比成本更具相关性。

我们的加密本身仍处于开发阶段,Windows工具甚至还不成熟。基本API存在,今天可用于创建证书,如我在此处所示,但仍有许多工作要做。当前创建的证书是您可以获得的最基本的证书。不支持通配符证书或更高端验证的证书。目前尚不清楚这是否会得到支持,因为更多地涉及为这些类型的证书设置注册。所以今天Let's Encrypt并不是解决所有SSL需求的解决方案,但它确实很好地服务于低端领域。你绝对可以如果你愿意忍受一点点成长的痛苦,今天就用它来获得免费的SSL证书。特别是使用LetsEncrypt-win-simple,它很容易上手,甚至可以保持最新状态。

在未来,我希望我们能够看到直接内置到Web服务器中的Let's Encrypt等服务的集成。事后看来,拥有一个通用的证书注册协议是如此明显。特别是对于IIS和Windows一般来说,一直是如此痛苦的证书管理屁股。我怀疑我们会尽快看到这种整合。

您如何看待自己使用此服务?您是否仅仅因为服务是免费的,还是因为自动化机会而使用它?在评论中发出声响。

资源