HTTP网站HTTPS化操作指导
Posted 云开源
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HTTP网站HTTPS化操作指导相关的知识,希望对你有一定的参考价值。
最开始接触HTTPS的概念是因为非HTTP网站,在谷歌等浏览下直接标注为不安全,经过HTTPS化之后,浏览器会标注为安全。因此想到需要将网站HTTPS化。本文将从HTTPS基本概念介绍开始,依次介绍证书申请,和如何部署证书到nginx服务器上。
本文按如下顺序组织:
(1)HTTPS和HTTP的区别介绍
(2)SSL证书介绍
(3)Let’s Encrypt免费DV证书申请
(4)Let’s Encrypt DV证书nginx服务器部署
1
HTTPS和HTTP的区别
超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息。HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂其中的信息,因此HTTP协议不适合传输一些敏感信息,比如信用卡号、密码等。
为了解决HTTP协议的这一缺陷,需要使用另一种协议:安全套接字层超文本传输协议HTTPS。为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。
HTTPS和HTTP的区别主要为以下四点:
https协议需要到ca申请证书,一般免费证书很少,需要交费。
http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议。
http和https使用的是完全不同的连接方式,用的端口也不一样,前者是80,后者是443。
http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全。
2
SSL证书介绍
SSL 证书按大类一般可分为 DV SSL 、OV SSL 、EV SSL 证书。有的也会叫做域名型、企业型、增强型证书:
域名型 https 证书(DV SSL):信任等级一般,只需验证网站的真实性便可颁发证书保护网站;
企业型 https 证书(OV SSL):信任等级强,须要验证企业的身份,审核严格,安全性更高;
增强型 https 证书(EV SSL):信任等级最高,一般用于银行证券等金融机构,审核严格,安全性最高,同时可以激活绿色网址栏。
对于个人博客,小型企业展示站点来说,申请DV SSL就足够了,更重要的网上有很多供应商提供免费的DV证书,降低网站部署HTTPS的成本。目前市面上比较容易找到的免费证书如下:
腾讯云SSL证书管理(赛门铁克TrustAsia DV SSL证书)
百度云SSL证书服务
Let’s Encrypt
BAT的SSL免费证书有效期均为一年,每个证书支持单个域名,不支持泛域名。阿里云之前也提供免费1年的DV证书,现在已经找不到申请入口了。
Let’s Encrypt免费证书期限均为3个月,证书支持泛域名,但可以无限续期三个月。
此外,还有2个已经被Firefox, Chrome等浏览器弃用的证书厂商,在目前情况下我们应该避免使用:
StartSSL免费DV证书
沃通(Wosign)免费DV证书
接下来我们介绍如何使用Let’s Encrypt进行证书申请。
3
Let’s Encrypt DV证书申请
Let’s Encrypt官方推荐使用Certbot程序来获取证书,但会相对比较抽象,我们使用浏览器手动获取证书来学习证书校验的过程。(更多获取Let’s Encrypt DV证书的方式见参考资料3)
https://gethttpsforfree.com/#Get HTTPS for free!
3.1 验证账户信息 Account Info
1.输入自己邮箱
2.生成私钥private key
#在控制台工作目录下操作:openssl genrsa 4096 > account.key
3.输出公钥public key
openssl rsa -in account.key -pubout
将屏幕输出信息复制到“Account Public Key”输入框内并验证
3.2 证书签名请求 Certificate Signing Request(CSR)
1.生成TLS私钥
openssl genrsa 4096 > domain.key
2.生成CSR
将屏幕输出信息复制到“Certificate Signing Request”框内并验证
3.3 验证私钥签名请求 Sign API Requests
将上面文本框中的信息复制到控制台执行,并将输出结果填写到下面的文本框,全部完成后进行验证。
3.4 验证网站所有权 Verify Ownership
1.像上步操作一样,验证私钥签名请求。
2.有两个选项:”Option 1 - python server” “Option 2 - file-based”,对于一般的网站我们选择Option 2 - file-based
3.要求在网站的某个公共目录下,返回某些字符串。如对于我的要求
Under this url:http://www.example.com/.well-known/acme-challenge/foPYRXbJcScL91deCJ1_iNQeCyR_tj8iM56R9rJDFnUServe this content:foPYRXbJcScL91deCJ1_iNQeCyR_tj8iM56R9rJDFnU.kuzVPNxeWS-ioFoGisdzWzu9-UJRuh_Xzpbtjkf0A0k
我们首先应当确定网站的根目录,新建文件夹
mkdir -p .well-known/acme-challenge
再新建文件,并将content内容复制保存
vim .well-known/acme-challenge/foPYRXbJcScL91deCJ1_iNQeCyR_tj8iM56R9rJDFnUfoPYRXbJcScL91deCJ1_iNQeCyR_tj8iM56R9rJDFnU.kuzVPNxeWS-ioFoGisdzWzu9-UJRuh_Xzpbtjkf0A0k
TIPS:不同网站的公共根目录不一样,打开浏览器查看页面代码,查看资源文件所在的根目录一般就是网站的公共目录
4.点击验证按钮,即可验证成功,在下面的“Signed Certificate”和“Intermediate Certificate”两个文本框内生成证书。
4
Let’s Encrypt DV证书nginx服务器部署
1.将上面“Signed Certificate”和“Intermediate Certificate”内生成的密钥信息先后复制到chained.pem文件中
2.将chained.pem和domain.key复制到文件夹/etc/nginx/(目录可以自己选择)下
3.修改nginx配置文件,增加HTTPS访问
修改前nginx配置文件
upstream www.example.com { server 192.168.1.a; server 192.168.1.b;}server{ listen 80; server_name www.example.com; location / { proxy_pass http://www.example.com; }}
增加443端口HTTPS配置:
server { listen 443; server_name www.example.com; ssl on; ssl_certificate /etc/nginx/chained.pem; ssl_certificate_key /etc/nginx/domain.key; ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM; ssl_prefer_server_ciphers on; location / { proxy_pass http://www.example.com; }}
重载nginx配置
nginx -s reload
https://www.example.com
4.增加HTTP强制跳转功能
修改nginx原配置:
server{ listen 80; server_name www.example.com; location / { proxy_pass http://www.example.com; }}
修改为:
server{ listen 80; server_name www.example.com; return 301 https://$server_name$request_uri;}
重载nginx配置
nginx -s reload
此时访问
http://www.example.com
对应Apache来说,该网站上也有对应的操作说明。
需要注意的是对于个人免费DV证书来说,只有3个月的有效期,如果使用官网脚本的话是可以加定时任务执行无限延期的,本文不做进一步的讨论。
5
参考资料
(1)https,https://baike.baidu.com/item/https/285356?fr=aladdin
(2)SSL 证书服务,大家用哪家的?https://www.zhihu.com/question/19578422
(3)ACME Client Implementations,https://letsencrypt.org/docs/client-options/
(4)Get HTTPS for free!,https://gethttpsforfree.com/
扫码关注 我们哦!
以上是关于HTTP网站HTTPS化操作指导的主要内容,如果未能解决你的问题,请参考以下文章