帮助你如何将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机构有:GlobalSignDigiCertLet’s Encrpt等,你可以去这些平台购买,通过填写必要的表单信息,CA就可能把SSL证书签发给你(如果你填写的信息是假的就会失败)。此外,你还可以通过阿里云SSL证书腾讯云SSL证书等国内机构购买。Eli的SSL证书来自阿里云上合作的DigiCert,现在你可以获得免费3个月的SSL证书,白嫖难道不香吗?哈哈哈。再插一句:如果你在2023年11月之前就白嫖了的话你能够获得1年的使用时长。腾讯云不清楚是否有免费的证书活动,如果你知道有哪些CA机构能够获得免费SSL证书请在评论区告诉我们(敬礼,来自Eli 90°的鞠躬)。以Eli在阿里云SSL证书申请为例:

  1. 你需要在阿里云搜索栏搜索SSL并找到数字证书管理服务

OvhCpx.jpg

  1. 找到并点击SSL证书然后再点击免费证书

OviaKU.jpg

  1. 找到并点击创建证书

OvioSY.jpg

  1. 在这里,你需要准备的一些申请信息
  • 你购买的域名
  • 基本信息:姓名、邮箱、电话号码、身份证(申请OV、EV证书需要填写,而免费证书DV则不用)
  • 所在地

OvhwYj.jpg

  1. 最后等待CA给你签发SSL证书,查看其状态。

Oviqwv.jpg

请稍等片刻即可获得你专属的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无疑是将自己赤裸的身体暴露在黑客面前,那可能对于这台服务器来说将会遭遇到严重恶意的攻击。

OvhEQ6.jpg

安全组设置

请在你的Nginx服务器中的安全组入口方向上开放TCP 433端口(HTTPS通信标准端口)和TCP 80端口(HTTP通信标准端口),如果你的服务器是阿里云腾讯云请查看其相应安全组文档,这里将不再赘述详细操作过程。

第一步:下载SSL证书

当CA机构给你签发了其SSL证书后,你需要去下载它。因为本文是基于Nginx服务器安装SSL证书的教程文档,下载的SSL证书压缩包是包含后缀名为**.key秘钥和.pem证书**的文件。

第二步:在Nginx服务器上安装SSL证书

  1. 你需要使用SSH工具远程登录Nginx服务器,常见的SSH工具有OpenSSH、PuTTY、Xshell、Xftp等等,请你自行选择这些SSH工具登录你的Nginx服务器,对此,Eli使用Xshell在Nginx服务器上写linux命令,并使用Xftp将SSL证书文件上传至Nginx服务器。

  2. 登录后查看当前目录所在位置,再查看要修改的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/

Ovhp4r.jpg

OvhF3L.jpg

  1. 上述配置做完后,开始配置/etc/nginx/nginx.conf文件的内容。
1
$ vim /etc/nginx/nginx.conf

OvhzGC.jpg

进入nginx.conf内找到名为server{}处进行替换,参考如下代码,可直接复制粘贴,再替换<>的内容。需要注意的是第一个server是配置HTTPS内部信息,第二个server是配置HTTP强制转换成HTTPS,比如浏览器用户输入的是http://b-s-x.com,那么它将强制转换成https://b-s-x.com

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
server {
#HTTPS的默认访问端口443
#如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
listen 443 ssl;

#填写证书绑定的域名
server_name <yourdomain>;

#填写证书文件绝对路径
ssl_certificate cert/<cert-file-name>.pem;
#填写证书私钥文件绝对路径
ssl_certificate_key cert/<cert-file-name>.key;

ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;

#自定义设置使用的TLS协议的类型以及加密套件(以下为配置示例,请你自行评估是否需要配置)
#TLS协议版本越高,HTTPS通信的安全性越高,但是相较于低版本TLS协议,高版本TLS协议对浏览器的兼容性较差。
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

#表示优先使用服务端加密套件。默认开启
ssl_prefer_server_ciphers on;


location / {
root html;
index index.html index.htm;
}
}
server {
listen 80;
#填写证书绑定的域名
server_name <yourdomain>;
#将所有HTTP请求通过rewrite指令重定向到HTTPS。
rewrite ^(.*)$ https://$host$1;
location / {
index index.html index.htm;
}
}

Ovh12t.jpg

  1. 查找Nginx可执行目录sbin
1
$ find / -name nginx

OvhntX.jpg

Ovhmic.jpg

  1. 切换到/usr/sbin下,查看启动文件,然后重启Nginx服务。
1
2
3
$ cd /usr/sbin
$ ls
$ sudo ./nginx -s reload

OvhZrY.jpgOvhiii.jpg

注意:

  • 报错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证书配置成功!

OvhyCq.jpg

参考文档

阿里云产品SSL文档


感谢您的支持 | Thank you for supporting

帮助你如何将http转换成https | Help you how to convert http to https
http://example.com/2024/01/21/https/
作者
Eli Bi
发布于
2024年1月21日
更新于
2024年1月22日
许可协议