刚发现在IIS下 用 win-acme (之前称为Let's Encrypt-Win-Simple) 比 Certbot 更简单。为Windows平台上的服务(主要是IIS)自动化Let's Encrypt证书的获取和续期过程。它是完全开源的。
=============
一、手动续期方法:
暂停IIS服务器 --> 暂时关闭防火墙 --> 执行certbot renew --> 打开防火墙 --> 用OpenSSL将证书转换为PFX格式-->pfx文件导入到IIS --> IIS对应网站中绑定新证书 --> 重新启动IIS -->完成
1、暂停IIS服务器
2、暂时关闭防火墙,命令
netsh advfirewall set allprofiles state off
3、在开始菜单中打开Certbot客户端(或者管理员权限powershell进入Certbot安装目录下的\bin目录)
先查看一下到期信息:
certbot certificates
执行
certbot renew
成功!
4、关闭防火墙
netsh advfirewall set allprofiles state on
5、用OpenSSL将最新获得的PEM格式的证书和私钥转换为PFX格式
-->C:\Certbot\archive\yourdomain.com\ 目录下找到最新的privkey.pem 和 fullchain.pem,复制到一个指定目录,然后在OpenSSL安装目录下执行:
C:\Program Files\OpenSSL-Win64\bin>openssl pkcs12 -export -out F:\pem\mysite.pfx -inkey F:\pem\privkey.pem -in F:\pem\fullchain.pem
6、双击pfx文件导入到IIS。(需输入创建pfx文件时设置的密码)
7、IIS对应网站中绑定证书:
8、重新启动IIS
二、自动续期方法
[未验证,以下是GPT的解答]
在Windows和IIS环境下实现SSL证书的自动续期,尤其是当使用Certbot客户端且需要特定操作(如暂停IIS服务器和关闭防火墙)来成功完成续期时,会稍显复杂。不过,你可以通过创建一个自动化脚本并结合Windows任务计划程序来实现这个目标。下面是一种可能的解决方案:
第一步:创建一个批处理脚本
-
创建一个新的批处理文件(例如,
CertbotRenew.bat
),并将其存放在一个可靠的位置,比如C:\Scripts\
。 -
编辑批处理文件,加入以下命令行:
@echo off REM 停止IIS服务 iisreset /stop REM 关闭Windows防火墙 netsh advfirewall set allprofiles state off REM 执行Certbot续期 "C:\Program Files\Certbot\bin\certbot.exe" renew REM 开启Windows防火墙 netsh advfirewall set allprofiles state on REM 重新启动IIS服务 iisreset /start
确保调整上述脚本中的路径和命令以匹配你的环境和需求。
第二步:使用Windows任务计划程序创建一个任务
-
打开任务计划程序:在开始菜单搜索"任务计划程序"并打开它。
-
创建新任务:在“操作”菜单中选择“创建任务”。
-
配置任务:
- 在“常规”标签下,给任务命名,并选择“不管用户是否登录都要运行”。
- 在“触发器”标签下,点击“新建”,设置任务的开始时间和重复频率。你可能希望每月运行一次,因为Let's Encrypt的证书有效期为90天,这样可以确保在证书到期之前有足够的时间来解决可能出现的任何问题。
- 在“操作”标签下,点击“新建”,“操作”选择“启动程序”,在“程序或脚本”框中输入你的批处理文件的路径(例如,
C:\Scripts\CertbotRenew.bat
)。
-
完成和保存任务:配置完毕后,点击“确定”保存新任务。
通过这种方式,你就创建了一个自动化任务,它会根据你设置的时间表自动运行,执行必要的操作来续期你的SSL证书,包括在续期过程中暂停IIS服务和关闭防火墙。
注意事项
- 确保在设置自动续期前,手动运行一次脚本来验证所有步骤都能正常工作。
- 考虑到安全性,频繁关闭防火墙并不是一个好的安全实践。如果可能,寻找不需要关闭防火墙的续期方法,例如配置适当的防火墙规则来允许Certbot进行验证,可能会是一个更安全的选择。
- 如果你的IIS站点配置或DNS记录会经常变动,确保在续期前验证这些配置仍然有效,以免自动续期失败。
- 考虑在脚本中加入日志记录功能,以便跟踪续期过程中可能出现的任何问题
三、windows + IIS 环节下如何使用Webroot插件完成SSL证书续期
在Windows和IIS环境下使用Certbot的Webroot插件完成SSL证书续期,需要确保Certbot能够在你的Web服务器上放置一个特殊文件,Let's Encrypt的验证服务器会访问这个文件以验证域名的所有权。这个过程不需要停止IIS服务或关闭防火墙,但要求IIS能够提供访问.well-known/acme-challenge
目录下文件的HTTP服务。
步骤 1: 确保Webroot路径存在
首先,你需要确定或创建一个目录,作为Webroot插件放置验证文件的地方。这通常是你网站文件存放的根目录。例如,如果你的网站根目录是C:\inetpub\wwwroot
,你需要确保这个目录存在并且IIS有权限访问它。
步骤 2: 配置IIS以服务.well-known/acme-challenge
- 打开IIS管理器。
- 选择你的网站。
- 在“操作”面板中,点击“浏览目录”并确保
.well-known
目录存在于你的Webroot目录下。如果不存在,请创建它。 - 同样,确保
.well-known
目录下有一个名为acme-challenge
的子目录。 - 为
.well-known/acme-challenge
目录配置MIME类型,以确保IIS能够正确地服务在此目录下创建的文件。在IIS管理器中选择网站或服务器级别,然后打开“MIME 类型”。添加一个新的MIME类型:文件扩展名为.*
,MIME类型为text/plain
。
步骤 3: 使用Webroot插件续期证书
在确认了上述配置后,你可以使用以下命令来续期证书,其中<your-webroot-path>
需要替换为实际的Webroot路径,例如C:\inetpub\wwwroot
:
certbot certonly --webroot -w <your-webroot-path> -d example.com -d www.example.com
这个命令会告诉Certbot使用Webroot插件,-w
选项指定了Webroot目录的路径,-d
选项后面跟着你想要证书覆盖的域名。
步骤 4: 更新IIS以使用新的证书
续期证书后,你可能需要手动更新IIS配置,以使用新的证书。这可以通过IIS管理器完成:
- 打开IIS管理器。
- 选择你的网站,然后点击“绑定…”。
- 找到使用旧证书的HTTPS绑定,点击“编辑”。
- 在“SSL 证书”下拉菜单中,选择新续期的证书。
- 点击“确定”保存更改。
自动化续期
虽然使用Webroot插件可以手动续期证书,但Certbot在Windows上的自动续期可能不如Linux上那么直接。你可以通过创建一个定时任务来定期运行续期命令,并检查日志文件确认续期成功。
请注意,这个过程中的确切步骤可能根据你的具体环境和配置有所不同。如果遇到问题,检查Certbot日志文件和IIS日志文件可以提供有用的信息。