前言
为了安全性,如今的网站大都使用https协议进行传输。虽然本小站没有什么安全性的顾虑,但是现在的浏览器(例如chrome)点开http站点时,就会有一个标志出现:
有强迫症的我可忍不了这个,于是我赶紧找方法实现本站的https访问
https是个啥?
首先了解一下到底什么是https。按照惯例,先从百度百科无耻地摘抄关于https的介绍:
HTTPS (全称:Hyper Text Transfer Protocol over SecureSocket Layer),是以安全为目标的 HTTP 通道,在HTTP的基础上通过传输加密和身份认证保证了传输过程的安全性。HTTPS 在HTTP 的基础下加入SSL,HTTPS 的安全基础是 SSL,因此加密的详细内容就需要 SSL。 HTTPS 存在不同于 HTTP 的默认端口及一个加密/身份验证层(在 HTTP与 TCP 之间)。这个系统提供了身份验证与加密通讯方法。它被广泛用于万维网上安全敏感的通讯,例如交易支付等方面。
说了一堆看不懂的东西,简单来说https就是http+ssl协议的集合,利用ssl对http传输的内容进行加密,这里就需要ssl证书,终于轮到了本文的重点:如何申请免费的ssl证书?
方法一:阿里云内直接申请
第一个方法简单粗暴,在阿里云内能够直接申请到免费的ssl证书。在阿里云控制台内,点击“SSL证书-免费证书-立即购买”,就可以免费申请到单域名证书了,每个账户终身最多20张,对于一个小站来说是够用的
但是!问题来了!当我在构建remark42评论系统时,需要跳转到子域名上。然而此方法的证书只有单域名证书,这样的话访问子域名时浏览器会报证书不匹配的错误,于是我只能换另一种方法
方法二(推荐!):使用acme.sh申请
acme.sh是Github上的一个项目,它通过ACME协议自动从Let’s Encrypt(从2021年8月1日起,acme.sh默认使用ZeroSSL)上申请ssl证书,并且该项目还有贴心的中文文档,非常方便部署:
接下来还是详细说一下部署过程吧:
1. 安装 acme.sh
在需要安装证书的服务器上执行命令:
|
|
其中[email protected]
替换为自己的电子邮件,因为申请ZeroSSL需要一个账号
2. 生成证书
acme.sh 实现了 acme 协议支持的所有验证协议. 一般有两种方式验证: http 和 dns 验证
http验证
http 方式需要在你的网站根目录下放置一个文件, 来验证你的域名所有权,完成验证. 然后就可以生成证书了
如果使用了nginx,可以直接执行一下命令:
1
acme.sh --issue -d mydomain.com --nginx
在apache中使用命令:
1
acme.sh --issue -d mydomain.com --apache
这种方法在验证后需要自己在nginx或apach的配置文件中手动配置ssl 2. dns验证
dns 方式手动在域名上添加一条 txt 解析记录, 验证域名所有权。然而现在大多数域名解析商提供api(如大多数域名解析商),acme.sh可以使用 api 自动添加 txt 记录完成验证
以阿里云为例:
首先登录阿里云帐户以获取 API 密钥。 https://ak-console.aliyun.com/#/accesskey
1 2
export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje" export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"
再运行以下命令办法证书:
1
acme.sh --issue --dns dns_ali -d example.com -d www.example.com
更多api的支持可以点击这里
如果需要注册泛域名证书/通配符证书或多域名证书,在命令后加
-d *.example.com
或加数个指定的域名即可(当时我没有注意,结果申请了好多次……)
3. 复制/安装证书
证书生成以后, 接下来需要把证书复制到指定位置
nginx使用以下命令:
|
|
apache使用以下命令:
|
|
nginx配置文件
无论使用哪种方法,最后要在nginx中配置server:
|
|
后记
以上就是申请ssl证书的方法,小朋友们学废了吗?总之有脚本部署还是非常方便的,最重要的就是免费!