帮助你如何将http转换成https | Help you how to convert http to https
写在前面的话
Hi,我是你们的朋友Eli。在你阅读本文档之前,你需要注意本文章是基于Ngnix服务器上关于SSL证书配置的教程文档,否则请移步其它服务器SSL配置。如果你想尽快开始配置你的SSL证书,请立刻跳转目录至前提条件
。
什么是SSL协议?
SSL(Secure Sockets Layer)是一种用于保护在计算机网络上传输的数据的协议。SSL建立在传输层之上,为应用层提供安全性,确保数据在网络上的传输是加密和安全的。SSL协议是Web安全性的基础,被广泛用于保护网站上的用户敏感信息,如登录凭据、信用卡信息等。HTTPS就是基于SSL的安全版本,通过使用SSL协议来加密HTTP通信。
为什么需要SSL协议?
HTTP(Hyper Text Transfer Protocol)是一种用于在Web上传输数据的协议。然而,纯粹的HTTP传输是不安全的,因为它是明文传输的,即发送的数据在网络上以纯文本形式传递,容易被中间人窃听和篡改。HTTP需要安装SSL证书里的SSL协议变为HTTPS来加密通信,使得用户浏览器与需要获取资源的服务器之间建立只有双方才能知道的链接,HTTPS是如何工作的?除此之外,安装了SSL证书的服务器在谷歌、百度等搜索引擎中能获得较高的网站排名,即浏览器用户能够更容易在搜索引擎查找到来自安装了SSL证书服务器的网站(相较于HTTP普通网站)。
前提条件
请在Nginx服务器上配置SSL证书之前,需满足如下三个条件:
CA签发的SSL证书
你需要找到一个受信任的证书颁发机构(Certificate Authorities,CA)来签发给你的SSL证书,常见的著名CA机构有:GlobalSign、DigiCert、Let’s Encrpt等,你可以去这些平台购买,通过填写必要的表单信息,CA就可能把SSL证书签发给你(如果你填写的信息是假的就会失败)。此外,你还可以通过阿里云SSL证书,腾讯云SSL证书等国内机构购买。Eli的SSL证书来自阿里云上合作的DigiCert,现在你可以获得免费3个月的SSL证书,白嫖难道不香吗?哈哈哈。再插一句:如果你在2023年11月之前就白嫖了的话你能够获得1年的使用时长。腾讯云不清楚是否有免费的证书活动,如果你知道有哪些CA机构能够获得免费SSL证书请在评论区告诉我们(敬礼,来自Eli 90°的鞠躬)。以Eli在阿里云SSL证书申请为例:
- 你需要在阿里云搜索栏搜索SSL并找到数字证书管理服务。
- 找到并点击SSL证书然后再点击免费证书。
- 找到并点击创建证书。
- 在这里,你需要准备的一些申请信息。
- 你购买的域名
- 基本信息:姓名、邮箱、电话号码、身份证(申请OV、EV证书需要填写,而免费证书DV则不用)
- 所在地
- 最后等待CA给你签发SSL证书,查看其状态。
请稍等片刻即可获得你专属的SSL证书。
DNS解析
如果你的网站早已开始运营可以快速跳过这段话,如果没有开始运营,是刚建站的小白,请在相应平台(阿里云、腾讯云等)上购买域名并解析到你的服务器IP。DNS解析是你的域名与服务器IP地址的相互映射,例如:你的购买的域名是xxx.com
,你购买的服务器IP地址是19.xxx.xxx.xxx
,通过DNS解析后,用户浏览器在网址中输入xxx.com
将会转换成对应服务器IP地19.xxx.xxx.xxx
,即域名与服务器IP成一一对应关系。那为什么不直接在浏览器上输入服务器IP19.xxx.xxx.xxx
呢?这样多方便呀,其实这样是可行的,你可以直接输入IP去访问网站。但你知道,对于服务器来说暴露自己IP无疑是将自己赤裸的身体暴露在黑客面前,那可能对于这台服务器来说将会遭遇到严重恶意的攻击。
安全组设置
请在你的Nginx服务器中的安全组入口方向上开放TCP 433端口(HTTPS通信标准端口)和TCP 80端口(HTTP通信标准端口),如果你的服务器是阿里云、腾讯云请查看其相应安全组文档,这里将不再赘述详细操作过程。
第一步:下载SSL证书
当CA机构给你签发了其SSL证书后,你需要去下载它。因为本文是基于Nginx服务器安装SSL证书的教程文档,下载的SSL证书压缩包是包含后缀名为**.key秘钥和.pem证书**的文件。
第二步:在Nginx服务器上安装SSL证书
-
你需要使用SSH工具远程登录Nginx服务器,常见的SSH工具有OpenSSH、PuTTY、Xshell、Xftp等等,请你自行选择这些SSH工具登录你的Nginx服务器,对此,Eli使用Xshell在Nginx服务器上写linux命令,并使用Xftp将SSL证书文件上传至Nginx服务器。
-
登录后查看当前目录所在位置,再查看要修改的
nginx.conf
文件绝对位置,等会需要配置其信息,发现在/etc/nginx/nginx.conf
。因为当前用户是普通用户登录,请给它超级用户root权限修改/etc/nginx
文件夹,给它所有权限777
,原因是普通用户无法对/etc/nginx
文件夹进行读取、写入和执行的权限,设置好权限后在nginx文件夹下创建名为cert
的文件夹存放下载的SSL证书(.pem和.key),因为/etc/nginx/cert
会继承/etc/nginx
的所有者读取、写入和执行的权限,直接使用Xftp将本地SSL证书直接上传至/etc/nginx/cert
下。1
2
3
4$ pwd
$ nginx -t
$ sudo chmod 777 /etc/nginx/
$ sudo mkdir /etc/nginx/cert/
- 上述配置做完后,开始配置
/etc/nginx/nginx.conf
文件的内容。
1 |
|
进入nginx.conf内找到名为server{}
处进行替换,参考如下代码,可直接复制粘贴,再替换<>
的内容。需要注意的是第一个server是配置HTTPS内部信息,第二个server是配置HTTP强制转换成HTTPS,比如浏览器用户输入的是http://b-s-x.com,那么它将强制转换成https://b-s-x.com
1 |
|
- 查找Nginx可执行目录
sbin
。
1 |
|
- 切换到
/usr/sbin
下,查看启动文件,然后重启Nginx服务。
1 |
|
注意:
- 报错
the "ssl" parameter requires ngx_http_ssl_module
:你需要重新编译Nginx并在编译安装的时候加上--with-http_ssl_module
配置。- 报错
"/cert/3970497_demo.aliyundoc.com.pem":BIO_new_file() failed (SSL: error:02001002:system library:fopen:No such file or directory:fopen('/cert/3970497_demo.aliyundoc.com.pem','r') error:2006D080:BIO routines:BIO_new_file:no such file)
:你需要去掉证书相对路径最前面的/
。例如,你需要去掉/cert/cert-file-name.pem
最前面的/
,使用正确的相对路径cert/cert-file-name.pem
。
第三步:验证证书是否配置成功
在浏览器上输入你的域名,如下图所示即SSL证书配置成功!
参考文档
![](/img/donate.jpg)