抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

使用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
2
3
PS C:\WINDOWS\system32> cd "C:\Program Files\Cerbot\bin"
PS C:\Program Files\Certbot\bin>
# Program Files文件夹中间存在空格,识别时可能会被分隔开而报错。所以路径用" "包括。

在切换到cerbot所在目录后,根据服务器的运行状况,选择不同的命令来申请证书:

  • 网站服务器已经关闭时,使用:
    1
    certbot certonly --standalone
  • 网站服务器正在运行时,使用:
    1
    certbot certonly --webroot

确保网站正在运行。使用certbot certonly --webroot命令来申请证书:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 申请证书命令
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来显示已有证书:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
1703941258207

1703941258207

在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
2
3
4
5
6
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
    如果一切正常,输出会显示
    1
    2
    read ** key
    writing ** key
    并可以在输出文件夹找到privkey.key文件。

现在我们已经获取了filebrowser支持的证书和私钥文件,现在可以配置filebrowser的tls配置了。

为服务器配置https

在filrborwser的目录中创建一个tls文件夹,将crt证书文件和key私钥文件存放其中。
接下来,使用config set命令为filebrowser指定crt文件和key文件。

1
2
3
# 确保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协议访问域名就可以正常访问了。

评论