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化操作指导的主要内容,如果未能解决你的问题,请参考以下文章

PeopleSoft用户操作手册的介绍

要想将自己的个人网站弄成https加密的该如何操作?

指导手册03:Hadoop基础操作

一行 Python 实现并行化 -- 日常多线程操作的新思路

网站维护思路,静态化思路

py服务端工程师面试指导