黑科技

网站由http升级为https

2019-06-10  本文已影响82人  简书是什么书

为什么要升级?

Google很早就已经开始大力推广https,甚至明说相同条件下,https网站的排名会更靠前。但因为升级至https存在一定的技术门槛,而且成本也比较高昂(证书要花钱),所以当时响应支持的并不是很多。

但是今天,在各大企业的大力推广下,https已经非常普及了,目前Top 100的网站中已经有90%的网站默认使用了https,而且 Let’s Encrypt 也在给全球用户提供永久免费的证书(虽然3个月需要更新一次),所以唯一的限制就是技术门槛了,你就不得不学习一下该如何升级你的网站了!


升级流程

升级https,我们可以分为3步:购买证书、安装证书、设置跳转,下面来大致看下这3步的流程,最后会有详细步骤

1. 购买证书

证书类型分为DV、OV、EV这三种,这三种有什么区别?

DV(域名型SSL):个人站点、iOS应用分发站点、登陆等单纯https加密需求的链接;
OV(企业型SSL):企业官网;
EV(增强型SSL):对安全需求更强的企业官网、电商、互联网金融网站;

Let’s Encrypt提供的SSL证书支持单域名、多域名、通配符等类型,而且用的人也比较多,关键是免费,所以个人站长或小公司多半会选择他!虽然免费的有效期只有3个月(过期之前可以免费更新),但是我们可以通过Linux的计划任务让它自动更新就好啦!

2. 安装证书

证书购买完成(或者生成)后,你就可以得到对应域名的证书文件。根据你Web服务器的不同种类一般证书也会分为多种,请根据自己的实际情况下载安装,一般的常见的Web服务器分为Nginx、Apache、Tomcat、IIS 6、IIS 7/8这几种。所谓的安装其实就是将证书放到你的服务器,再改改服务器的配置。

3. 设置跳转

经过上面的步骤,你的网站就能以 https://domainhost 的形式访问了,但是这个时候http和https同时都能够访问,我们可以修改服务器的配置将http请求通过301 redirect到https上去。

安装Let’s Encrypt的证书

根据上面的步骤,我们可以知道,升级https其实并不困难,很多步骤都是固定的。而且网络上已经有很多封装好的脚本可以直接使用,这里给大家推荐一个 acme.sh , 项目文档

系统: CentOS 7.3

服务器: Apache 2.4.27

按照上面的项目文档,就可以搞定啦,我这里总结下基本的步骤,和我安装过程中踩到的坑:

1. 安装 acme.sh

# 进到~目录执行
$ curl  https://get.acme.sh | sh
 
# 给脚本创建一个别名
$ alias acme.sh=~/.acme.sh/acme.sh

2. 生成证书

# 我的域名是: lizeong.com 
$ acme.sh  --issue  -d lizelong.com -d www.lizelong.com  --apache

3. copy/安装 证书

# 我将证书放到了Apache的安装目录里面的cert,所以需要新建文件夹
$ mkdir /usr/local/apache2/cert
 
# 将证书安装到指定目录
$ acme.sh --install-cert -d lizelong.com \
-d www.lizelong.com \
--cert-file      /usr/local/apache2/cert/cert.pem  \
--key-file       /usr/local/apache2/cert/key.pem  \
--fullchain-file /usr/local/apache2/cert/fullchain.pem \
--reloadcmd     "apachectl restart"

注意:
1. 路径要给对
2. 最后的--reloadcmd是你服务器的重启命令。
3. 以上步骤的详细解释请看项目文档

4. 修改配置

1. 打开 Apache 安装目录下的 conf 目录中的 httpd.conf 文件,找到以下内容并去掉“#”:
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf

ps: 我的Apache在编译的时候没有mod_ssl模块,所以多了一步安装ssl模块,在不重新编译Apache的前提下安装ssl:

# 进入Apache的源码目录
$ cd /soft/httpd-2.4.27/modules/ssl/

# 执行以下命令:
$ /usr/local/apache2/bin/apxs -i -c -a -D HAVE_OPENSSL=1 -I /usr/include/openssl -lcrypto -lssl -ldl *.c
2. 打开Apache安装目录下的conf/extra/httpd-ssl.conf文件(或conf.d/ssl.conf),在配置文件中找到以下语句并配置:
Listen 443
SSLHonorCipherOrder on
<VirtualHost _default_:443>
    DocumentRoot "网站的根目录"
    ServerName www.lizelong.com:443    #域名
    ServerAlias lizelong.com:443       #别名
    ErrorLog "/usr/local/apache2/logs/错误日志"
    TransferLog "/usr/local/apache2/logs/访问日志"
     
    SSLEngine on
     
    #下面的路径别改错了哦~
    SSLCertificateFile "/usr/local/apache2/cert/cert.pem"
    SSLCertificateKeyFile "/usr/local/apache2/cert/key.pem"
    SSLCertificateChainFile "/usr/local/apache2/cert/fullchain.pem"
</VirtualHost>
3. 重启Apache
$ apachectl restart

这时候,你的网站应该就可以用https访问了,如果访问不了,看看是不是你的安全组没有开放443端口。

我的服务器是阿里云的esc,并且只开放了有限的端口,所以需要去到控制台的安全组设置一下,具体操作不会的话请自行百度。

但是同样的http也能访问,所以我们还差最后一步,让http的访问通过301重定向到https。

4. Apache设置重定向

修改网站根目录的 .htaccess

<IfModule mod_rewrite.c>
  RewriteEngine On
  #http 80端口的请求用301跳转到https
  RewriteCond %{SERVER_PORT} 80
  RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
</IfModule>

总结

至此,网站升级https的工作已经全部完成了,但是升级https之后还有一些收尾工作需要进行,比如尽量将引用图片等静态资源的路径改为相对路径,所有的http协议头都改为https或者直接不写,支付接口的回调地址等需要绝对路径的地方,记得改一下,否则会给你带来一些“惊喜”。

上一篇 下一篇

猜你喜欢

热点阅读