使用Cerbot申请Let’s encrypt证书
Let’s encrypt证书服务是使用最广泛的免费证书服务之一。对于个人势开发者而言是经济实惠的选择。
本节记录了使用Cerbot申请Let’s encrypt证书并为windows下使用内网穿透的filebrowser服务器配置https服务的过程。
预先准备
设备与软件:
- 基于windows系统的服务器,运行内网穿透与filebrowser服务,无公网ip
- 樱花映射——为windows服务器提供内网穿透
- 一个自有域名,dns解析到内网穿透
- cerbot——证书签发软件,不需要预下载。在下载并安装cerbot章节部分再下载。
- openssl——证书转化软件,用于转化证书格式。
- 一颗有耐心的小脑袋
对于没有公网Ip的服务器,在准备阶段以及证书的签发阶段可能会多遇到一些困难——但好在线路的配置并不算难。由于是第一次配置https,大量时间花在了申请证书和转化格式上。
建立域名——内网穿透——服务器的线路
配置filebrowser服务与域名的购置
配置filebrowser服务传送门:[[Blog/部署Filebrowser轻量网盘服务]]
filebrowser服务器的默认端口为8080。在启动服务后,可以在本地通过http协议访问:localhost:8080
或者http://127.0.0.1:8080
本地访问正常后就可以开始配置内网穿透了。
如果没有域名,则需要购置一个域名。通常,对于个人势而言top等域名不断太贵,也不算小众,是性价比较高的域名之一。这个域名会被指向内网穿透的供应商,再由供应商指向没有公网ip的服务器,打通这道通信墙。
域名与内网穿透的连接
樱花映射是众多内网穿透的服务商之一。使用其他映射服务商的方法也基本是相同的。
如果不打算配置域名,可以直接使用映射服务商提供的ip或网址,使用tcp隧道就可以实现。这种方式配置通常适用于个人或者非公开的服务使用。
但是如果打算使用自己的域名,则需要配置http隧道或者https隧道;通常,对外服务的服务器会配置https隧道并且配置tls协议,也是本文的主题。
建立一条https隧道:
- 本地端口使用filebrowser的8080端口。
- 域名指向自己的域名或者子域名——自己想用来指向该服务器的域名。
- 现在,映射服务会为你显示一条服务商提供的中间域名。
注意:对于樱花映射,内地节点的域名指向需要进行ICP备案,极为繁琐。通常建议选择香港节点,速度比海外更快,通常也不需要备案。
左右段分别连接隧道:
- 打通隧道后,在服务器端启用映射客户端。
- 在域名提供商处启用dns解析,将自己想要使用的域名添加一条记录,类型为CNAME——将自己的域名指向映射服务商提供的中间域名。
这样,一条域名——内网穿透——服务器的连接线路就已经确立。如果建立的是https隧道,现在就可以访问了(但是https不行)
接下来要做的是申请到tls证书,并转为filebrowser使用的格式。
申请TLS证书并转化格式
这一步踩了无数的坑。
创建一个临时的网络服务器线路
在确保线路畅通无阻后,就可以暂时关闭filebrowser,接下来做的一切目的都是为了获取到域名的tls证书。
现在启用另一个网页服务器——这个服务器只是用于申请到证书,所以最好是轻量、便于部署与配置,重点是能够访问根目录,因为tls证书的下发需要能够访问服务区根目录。
在这里,选择架设一个hexo博客网站,启用80端口,并新建一条通向域名的http隧道(端口为80,域名配置与filebrowser隧道相同,域名的dns解析也要先指向这条隧道的中间域名),确保80端口可以被远程访问。cerbot的验证需要能够访问80端口。。
下载并安装cerbot
Cerbot是为域名下发证书的热门客户端之一,能够极为便利地签发tls证书(虽然对于没有经验的初心者依旧会有一些门槛)。
传送门:Certbot
cerbot的首页或许会显得有些让人无从下手——因为没有「快速下载」或者「一键部署」之类的按钮给你点。但我们只要填写好系统架构与网页服务器类型,certbot就会列出一份对应的操作手册。
本次申请的网页服务器使用的是基于windows的hexo博客框架,在这里填入「nginx」与「windows」。
随后cerbot会导向一个页面,提供了下载cerbot桌面客户端的链接。现在下载并安装cerbot。
使用命令行在cerbot获取证书
如果根据默认安装的路径,64位cerbot.exe会位于Program Files\Cerbot\Bin
中。现在确保服务器已联网,再次确认80端口的线路可以访问,并知晓hexo的网页根目录(通常位于hexo\public
文件夹)。
以命令行(CMD或者Powershell)的管理员模式打开,并切换到cerbot.exe所在的目录。如果默认安装在c盘,那么使用cd命令来切换:
1 | PS C:\WINDOWS\system32> cd "C:\Program Files\Cerbot\bin" |
在切换到cerbot所在目录后,根据服务器的运行状况,选择不同的命令来申请证书:
- 网站服务器已经关闭时,使用:
1
certbot certonly --standalone
- 网站服务器正在运行时,使用:
1
certbot certonly --webroot
确保网站正在运行。使用certbot certonly --webroot
命令来申请证书:
1 | # 申请证书命令 |
现在,可以验证本机是否已经接受到证书。使用cerbot certificates来显示已有证书:
1 | PS C:\Program Files\Certbot\bin> .\certbot.exe certificates |
cerbot会自动更新证书。也可以手动使用certbot renew --dry-run
来手动更新证书。
现在我们已经获得了证书,可以关闭hexo服务器,开始准备配置filebrowser的https服务了。
使用openssl转化证书格式
申请到证书后,在C:\Certbot
中会产生archieve与live两个文件夹。
- live 文件夹:动态文件夹,包含当前使用的证书,会定期更新。
- archive 文件夹:静态文件夹,包含历史所有已颁发的证书,文件不会更改。
为确保始终使用 Let’s Encrypt 最新颁发的证书。通常会使用 live 文件夹中的证书文件。
使用上述方法获取到的证书中,会用到这两份文件:fullchain.pem和provkey.pem。
- fullchain.pem:证书链文件,。指定为 cert 证书文件。
- privkey.pem:私钥文件,指定为 key 私钥文件。
filebrowser的https配置需要使用crt与key格式的文件。我们需要将pem格式转为这两个格式。
下载openssl的桌面客户端:
Win32/Win64 OpenSSL Installer for Windows - Shining Light Productions
在Light轻量版与全量版中,我们只需要下载轻量版。尽量下载最新版本。
如果安装目录为默认,那么在安装完成后我们能在C:\Program Files\OpenSSL-Win64\bin
中找到openssl.exe文件。
现在进入命令行,切换到openssl所在目录后,分别转化证书文件与私钥文件。
证书文件的转化
1 | openssl x509 -in fullchain.pem -out fullchain.crt |
- 这行命令将fullchain.pem转为fullchain.crt证书文件。
- x509是最常用的证书格式。
- 在
-in
和-out
中输入文件的路径。 - 不要直接在
-in
中输入cerbot导出路径中的文件。你会注意到这两个文件的占用都是0kb,因为这不是文件而是网页快捷方式。你需要复制这两个文件到openssl.exe所在的目录,再进行操作。 - 不要直接将
-out
路径设在当前路径。非管理员命令行不允许向Program Files
文件夹内保存文件。建议设置一个绝对路径,例如桌面,下载目录,或者方便访问的目录。例如,填写为:"C:\Users\<Users>\Downloads\fullchain.crt"
如果一切正常,输入这串命令后不会有提示输出,并可以在输出文件夹找到fullchain.crt文件。
私钥文件的转化
接下来将privkey.pem转为privkey.key私钥文件。私钥有许多格式,例如:
1 | RSA 私钥 |
私钥属于哪种格式,就使用对应的转化命令。如果不确定自己申请到的私钥是哪种格式,可以在cerbot中使用certificates命令确认私钥格式。
- 输入和输出路径的要点与crt的转化相同。
- 使用了错误的转化格式就会报错。例如,对不是rsa格式的私钥使用了RSA转化,就会报错
Not an RSA key
。
如果一切正常,输出会显示并可以在输出文件夹找到privkey.key文件。1
2read ** key
writing ** key
现在我们已经获取了filebrowser支持的证书和私钥文件,现在可以配置filebrowser的tls配置了。
为服务器配置https
在filrborwser的目录中创建一个tls文件夹,将crt证书文件和key私钥文件存放其中。
接下来,使用config set命令为filebrowser指定crt文件和key文件。
1 | # 确保filebrowser服务已停止。 |
- File Browser 2.0 起开始内建 HTTPS 支持,只需要配置 SSL 证书即可。
- 配置完 SSL 后,只可以使用 HTTPS 访问,不可以使用 HTTP。
- 取消 SSL:
filebrowser -d /etc/filebrowser.db config set --cert "" --key ""
收尾
现在重新打开8080隧道并启动穿透服务。启动filebrowser。
如果一切正常,使用https协议访问域名就可以正常访问了。