为你的网站申请SSL证书并部署HTTPS

详细的申请SSL证书并部署HTTPS的教程

详细的申请SSL证书并部署HTTPS的教程

近期给自己的站点部署了HTTPS协议,趁热打铁把全过程发布到博客供大家学习,交流。转载请注明出处!

在部署之前让我们先粗浅地了解一下HTTPS协议和一些相关概念。

1.什么是HTTPS?

同样简单地说,就是在HTTP协议的基础上加入SSL层,实现加密传输数据。具体资料请自行使用搜索引擎查找。

2.什么是SSL证书?

SSL证书全称:SSL安全通道(Secure socket layer(SSL)。该安全协议主要用来提供对用户和服务器的认证;对传送的数据进行加密和隐藏;确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准。

SSL证书是数字证书的一种,类似于驾驶证、护照和营业执照的电子副本。因为配置在服务器上,也称为SSL服务器证书。

3.什么是CSR?

CSR:全称是证书签发请求(Certificate Signing Request) 即证书请求文件,也就是证书申请者在申请数字证书时由CSP(加密服务提供者)在生成私钥的同时也生成证书请求文件,证书申请者只要把CSR文件提交给证书颁发机构后,证书颁发机构使用其根证书私钥签名就生成了证书公钥文件,也就是颁发给用户的证书。

4.什么是CA?

ca(certification authority)是以构建在公钥基础设施pki(public key infrastructure)基础之上的产生和确定数字证书的第三方可信机构(trusted third party),其主要进行身份证书的发放,并按设计者制定的策略,管理电子证书的正常使用。


在了解完基本概念之后我们便可以开始第一步:SSL证书的申请

个人认为小站点无需使用付费的ssl证书,所以我们接着就使用一家国内免费的SSL

点击这里去申请免费的SSL:https://www.pianyissl.com/?i125561

我们进入网址,注册账号之后就能看到首页有免费测试的选项,点击进去。可申请3个月免费时长,并无限续期。

接着就是按照提示操作的过程了

输入你的域名,这里建议直接使用顶级域名。接着需要进行域名所有权验证。

我建议使用CNAME验证,方便快捷,如图。

验证过程可能需要几分钟的时间,可以先喝杯Java。

等待验证完成之后就可以去个人中心把证书打包下载到本地啦~

成功了一半,接着我们来将证书安装到服务器上。

这一步,申请证书的官网给出了对应各种WEB服务器的教程,Apache,Nginx,IIS···都不在话下。

这里直接给出网址:https://www.pianyissl.com/support/lists/3

找到对应的服务器点进去即可。

拿nginx为例,在配置文件里找到http{}块,在里面加入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443;
server_name localhost;
ssl on;
ssl_certificate server.crt;
ssl_certificate_key server.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL;
ssl_prefer_server_ciphers on;
location / {
root html;
index index.html index.htm;
}
}

小提示:1.nginx的配置文件,一个http块(即http{})里可以包含多个server{}

   2.前后的大括号要对应好哦~

   3.nginx默认配置文件在/usr/local/nginx/conf文件夹里(看你自己有没有修改过喽)

修改完就可以保存退出啦。然后先别着急重启nginx服务器,先来检查一下配置文件是否正确

输入:nginx -t

如果返回下图结果,则代表配置文件没有任何问题。

ok,然后你就可以重启nginx啦。

输入:service nginx restart

有人可能会问:为什么要先检查再重启?

如果没有先检查是否有错误就直接重启nginx的话,会导致nginx重启失败,然后在你重新改正配置文件后再重启你会发现nginx已经无法启动了。只能委屈巴巴地reboot

已经接近成功啦,让我们把事情做到完美。

现在可能会出现一个问题:当你使用https://访问服务器的时候,可能会出现连接被拒绝的尴尬。怎么办呢?很简单。这是因为服务商防火墙禁用了443端口导致的,而这是我们https必须开放的端口。我使用的是阿里云的服务器,阿里云默认443是禁用的,需要自己登陆后台,将443端口开放,开放后即可正常访问。

最后一步:将http请求自动重定向到https

你会发现,现在你输入https://来访问已经能够访问了,但是倘若你仍然使用http://访问,得到的还是http协议返回的数据,就没有达到加密的目的。怎么让我们访问http://自动跳转到https://呢?

其实炒鸡简单。我们再次打开nginx的配置文件,在里面加入这段:

1
2
3
4
5
server {  #普通的http访问跳转
listen 80;
server_name localhost
return 301 https://你的网址;
}

原理就是使用nginx的301跳转,很简单。

同样保存退出,重启nginx。

用浏览器访问,如下图


到此,我们的https部署全部结束。能够帮到你是我的荣幸。

如果你愿意的话就扫描一下赞赏码可以给我打赏,给我鼓励。谢谢