首页 > 免费SSL证书 > 如何在Windows中使用Let’s Encrypt 生成免费SSL证书

如何在Windows中使用Let’s Encrypt 生成免费SSL证书

2016年11月14日 发表评论 阅读评论

在过去一年左右,我一直在学习安全和https,并且获得证书一直是一个拖累。 当然, DNSimple使得它很容易和负担得起的,但它仍然是一个每年$ 20的东西是100%自动化,他们所要做的就是保持自己的系统上工作,并从中获益。

更新 :这事变得容易得多则已, 检查出跟进后这一个。

所以我很高兴能学到大约一年前左右的形成让我们加密 当他们形容它:“ 谁拥有一个域名可以用咱们加密以零成本获得受信任的证书。”

真棒! 他们有一些很好的赞助商,我捐助的电子FRONTEER基金会 ,开始这一倡议因此,在某种程度上,我还在支付我的证书,排序的。 😉

我本周超级兴奋,看到让我们的加密是在公共测试版现在,想要玩它! 但是,当然所有的官方工具集中在Linux环境,这是一段时间,因为我使用了。 所以,我发现了一个很酷的小项目在GitHub上称为ACMESharp ,实施使用PowerShell的让我们的加密使用的协议和API。

我花了一会儿把我的头围绕它,但它一切都有意义,玩了一段时间后,真的只有3个步骤:

  1. 您必须同意服务条款
  2. 您必须证明您拥有您想要凭证的网域
  3. 您请求证书

在为ACMESharp文档给了我一些线索,这是如何工作,但仍有一些“疑难杂症”的时刻出现。 我将带领你通过我想出的PowerShell脚本:

 Import-Module -Name D:\ Temp \ ACME-posh \ ACMEPowerShell.psd1 
  $ domain =“blog.smarthost.net.cn” 
  $ certificiatePassword =“123456” 
  $ email =“letsencrypt@smarthost.net.cn” 
  $ vault =“D:\ Vault \ {0} \ {1}”-f $ domain,[guid] :: NewGuid() 
  mkdir $ vault 
  cd $ vault

一些设置克鲁夫特-首先,你下载的ACMESharp 版本可用,并且地方将它解压缩并导入你发现在那里的模块。 我为每次尝试运行这个脚本创建一个新文件夹,每次生成一个新的GUID。

下一步:指向公共测试服务器,它会给你一个真实的,可信的证书。 起初,我在这里的URL仍然指向临时服务器,它提供了由“快乐黑客假CA”颁发的证书。 不用说:我不能在生产中使用那些。

 初始化ACMEVault -BaseURI https://acme-v01.api.letsencrypt.org/ 
 新ACMERegistration  - 联系mailto:$电子邮件 
 更新ACMERegistration  - 接受TOS

服务条款在这里接受,我给他们我的电子邮件地址,这是一个有点混乱,因为我在等待电子邮件进来点击“接受TOS”链接,但它没有来。 好,因为这是完全自动化的,我可以告诉他们在PowerShell,我接受服务条款,我明显研究过(不!)。

好的,现在有趣的部分开始:验证您是域的所有者。 你问我们加密,给你一个秘密随机生成的文本,你的网站所有者可以放在你的网站上。

  New-ACMEIdentifier -Dns $ domain -Alias dns1 
  New-ACMEProviderConfig -WebServerProvider手册-Alias manualHttpProvider -FilePath $ vault \ answer.txt 
  Get-ACMEIdentifier -Ref dns1 
  $ completedChallenge = Complete-ACMEChallenge -Ref dns1 -Challenge http-01 -ProviderConfig manualHttpProvider

注意:New-ACMEProviderConfig中的FilePath变量在0.7.1版本中不存在。 我创建了一个拉请求添加到ACMESharp,它被接受一小时后(yay!)。 如果你现在使用这个,你会得到一个记事本弹出一个实例,要求你完成FilePath在JSON的位,把它放入记事本。 我喜欢自动化,所以我问它是否只是一个变量。

现在,Complete-ACMEChallenge命令返回您完成挑战所需的所有信息,我没有正确地读这个,所以我不知道该怎么办。 我做错了,然后挑战状态设置为“无效”。 即使纠正了我的错误,并按照说明,它仍然“无效”。 “死了,现在我永远不能得到我的证书..”。 或者所以我想。 在Googling一段时间后,我发现一旦一个挑战被标记为无效一次,它永远不会有效(有很好的安全原因,防止重放攻击)。 所以诀窍是要求一个新的挑战,容易!

我添加了一些输出到我的PowerShell脚本,提醒我完全应该做什么:

  $ challengeAnswer =($ completedChallenge.Challenges | Where-Object {$ _。Type -eq“http-01”})。ChallengeAnswer 
  $ key = $ challengeAnswer.Key 
 写主机“” 
 写主机“在$ domain上创建文件夹结构如下:” 
 写主机“$ domain / $ key” 
  Write-Host“将index.html文件放在包含以下内容的位置:” 
 写主机$ challengeAnswer.Value

其中输出如下:

 在blog.smarthost.net.cn上创建文件夹结构如下: 
  blog.smarthost.net.cn/.well-known/acme-challenge/V6CPYDViDCk6X3YWC9wH61kKW2CHtQ-SLACnIcBNFPY 
 将index.html文件放在该位置,其中包含: 
  V6CPYDViDCk6X3YWC9wH61kKW2CHtQ-SLACnIcBNFPY.8uMzTUtlJpLEsyNHnTmLutOPZyFv4VUCFwaqram0gRo

我可以这样做! 因此,需要采取什么措施时,让我们的加密服务器转到URL //blog.smarthost.net.cn/.well-known/acme-challenge/V6CPYDViDCk6X3YWC9wH61kKW2CHtQ-SLACnIcBNFPY是响应应包含密钥的身体:V6CPYDViDCk6X3YWC9wH61kKW2CHtQ-SLACnIcBNFPY。 8uMzTUtlJpLEsyNHnTmLutOPZyFv4VUCFwaqram0gRo

在这种情况下,我这样做通过放置一个index.html在创建的文件夹中,因为我知道IIS将服务于默认情况下,您的服务器可能配置不同,所以请确保它以某种方式输出密钥(并且只有秘密密钥, 没有其他的)。

对! 现在我们可以告诉Let’s Encrypt:我准备好了,请验证:

  $ challenge = Submit-ACMEChallenge -Ref dns1  - 警告http-01 
  While($ challenge.Status -eq“pending”){ 
  Start-Sleep -m 500#等待半秒钟,然后尝试 
 写主机“状态仍然是”待定“,等待它改变...” 
  $ challenge = Update-ACMEIdentifier -Ref dns1 
  }}

在这里,提交挑战,可能需要一秒钟的状态从“待定”更改为“有效”,所以我请求更新每半秒,然后继续。

当状态是“有效”,我们是金,现在得到那个证书!

 新ACMecertificate  - 标识符dns1 -Alias cert1  - 生成 
  $ certificateInfo = Submit-ACMECertificate -Ref cert1 

  While([string] :: IsNullOrEmpty($ certificateInfo.IssuerSerialNumber)){ 
  Start-Sleep -m 500#等待半秒钟,然后尝试 
 写主机“IssuerSerialNumber尚未设置,正在等待它被填充...” 
  $ certificateInfo = Update-ACMECertificate -Ref cert1 
  }} 

  Get-ACMECertificate -Ref cert1 -ExportPkcs12 cert1-all.pfx -CertificatePassword $ certificiatePassword 

 写主机“全部完成,$ vault中有一个cert1-all.pfx文件,密码为$ certificiatePassword,您现在可以使用”

我们要求让我们加密来生成证书,然后我们再做几个ping来更新IssuerSerialNumber,这就是证书已经完全生成的时候。 最后,我们做一个Get-ACMECertificate接收它,它将被存储在$ vault文件夹中。 注意:我要为此证书添加密码,但此功能在ACMESharp的0.7.1版本中尚未提供。 再次,这是一个特定的需要,我有,我发送一个拉请求,迅速接受。

如果这一切听起来像很多工作:它不是!

现在你明白发生了什么,这个过程是可重复的。 这是非常必要的,因为默认这些证书过期每90天 ,并在将来更加迅速过期。 这是为了促进安全:一个受损的证书现在只能被滥用最多90天。 它也是为了促进自动化:我创建了一个PowerShell脚本,所以我可以自动化,他们实现了自己的目标!

在充分PS脚本的要点是提供给你复制和使用。

走出去,保护您的网站!

分类: 免费SSL证书 标签:
  1. 本文目前尚无任何评论.
  1. 本文目前尚无任何 trackbacks 和 pingbacks.