【Docker】使用Cerbot申请Let'sencrypt证书,并部署在filebrowser服务器
本节记录了使用Cerbot申请Let's encrypt证书并为windows下使用内网穿透的filebrowser服务器配置https服务的过程。
AUTHOR / MAGICNUE
TYPE / CODING RECORD
使用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命令来切换:
PS C:\WINDOWS\system32> cd "C:\Program Files\Cerbot\bin"
PS C:\Program Files\Certbot\bin>
# Program Files文件夹中间存在空格,识别时可能会被分隔开而报错。所以路径用" "包括。
在切换到cerbot所在目录后,根据服务器的运行状况,选择不同的命令来申请证书:
- 网站服务器已经关闭时,使用:
certbot certonly --standalone
- 网站服务器正在运行时,使用:
certbot certonly --webroot
确保网站正在运行。使用certbot certonly --webroot命令来申请证书:
# 申请证书命令
PS C:\Program Files\Certbot\bin> .\certbot.exe certonly --webroot
# 保存日志
Saving debug log to C:\Certbot\log\letsencrypt.log
# 如果是首次申请,需要填写邮箱、用户许可以及是否接收新闻选项。
# 要求输入域名,输入后Enter回车
Please enter the domain name(s) you would like on your certificate (comma and/or space separated) (Enter 'c' to cancel): <web.example.top>
# 正在申请证书
Requesting a certificate for web.magicnue.top
# 要求输入根目录位置。在此处填入hexo网页根目录的绝对路径(通常位于hexo\public文件夹)
Input the webroot for <web.example.top>: (Enter 'c' to cancel): D:\Hexo\blog\public
# 成功接受证书
Successfully received certificate.
# 显示fullchain.pem和provkey.pem文件保存在本机的路径。
Certificate is saved at: C:\Certbot\live\<web.example.top>\fullchain.pem
Key is saved at: C:\Certbot\live\<web.example.top>\privkey.pem
# 证书过期时间。cerbot会自动更新证书。
This certificate expires on <date>.
These files will be updated when the certificate renews.
Certbot has set up a scheduled task to automatically renew this certificate in the background.
现在,可以验证本机是否已经接受到证书。使用cerbot certificates来显示已有证书:
PS C:\Program Files\Certbot\bin> .\certbot.exe certificates
Saving debug log to C:\Certbot\log\letsencrypt.log
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Found the following certs:
Certificate Name: <web.example.top>
Serial Number: <Serial Number>
Key Type: ECDSA
Domains: <web.example.top>
Expiry Date: <date> (VALID: 89 days)
Certificate Path: C:\Certbot\live\<web.example.top>\fullchain.pem
Private Key Path: C:\Certbot\live\<web.example.top>\privkey.pem
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
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所在目录后,分别转化证书文件与私钥文件。
证书文件的转化
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私钥文件。私钥有许多格式,例如:
RSA 私钥
openssl rsa -in privkey.pem -out privkey.key
ECDSA 私钥
openssl ec -in privkey.pem -out privkey.key
DSA 私钥
openssl dsa -in privkey.pem -out privkey.key
私钥属于哪种格式,就使用对应的转化命令。如果不确定自己申请到的私钥是哪种格式,可以在cerbot中使用certificates命令确认私钥格式。
- 输入和输出路径的要点与crt的转化相同。
- 使用了错误的转化格式就会报错。例如,对不是rsa格式的私钥使用了RSA转化,就会报错
Not an RSA key。 如果一切正常,输出会显示
read ** key
writing ** key
并可以在输出文件夹找到privkey.key文件。
现在我们已经获取了filebrowser支持的证书和私钥文件,现在可以配置filebrowser的tls配置了。
为服务器配置https
在filrborwser的目录中创建一个tls文件夹,将crt证书文件和key私钥文件存放其中。 接下来,使用config set命令为filebrowser指定crt文件和key文件。
# 确保filebrowser服务已停止。
PS D:\filebrowser> .\filebrowser config set --key "D:\filebrowser\tls\privkey.key"
PS D:\filebrowser> .\filebrowser config set --cert "D:\filebrowser\tls\fullchain.crt"
- File Browser 2.0 起开始内建 HTTPS 支持,只需要配置 SSL 证书即可。
- 配置完 SSL 后,只可以使用 HTTPS 访问,不可以使用 HTTP。
- 取消 SSL:
filebrowser -d /etc/filebrowser.db config set --cert "" --key ""
收尾
现在重新打开8080隧道并启动穿透服务。启动filebrowser。 如果一切正常,使用https协议访问域名就可以正常访问了。