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

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

Windows和IIS - 不是一流的公民

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

可是我对IIS片断而不是Azure更感兴趣,由于我不使用Azure并在IIS上使用主机,所以在周末我使用这些工具进行旋转,以了解让Let的加密与个人IIS站点一块儿工做的真正缘由。这篇文章是我发现的内容的摘要。github

 

什么在Windows上可用

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

有不少选择:shell

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

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

  • 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通常来讲,一直是如此痛苦的证书管理屁股。我怀疑咱们会尽快看到这种整合。

您如何看待本身使用此服务?您是否仅仅由于服务是免费的,仍是由于自动化机会而使用它?在评论中发出声响。

资源