让网站支持https访问

2,146 阅读2分钟

背景

最近在弄自己的个人网站,顺便也让网站支持了一波 https 访问。当你在 Chrome 浏览器访问一些网站时,发现网站在网址左侧都有一个🔐的图标,点击显示当前连接是安全的。转身看看自己的网站,发现一个感叹号,并且友情提示连接不安全,可能会受到攻击。这不能忍!!!

近几年,Google 越来越重视 Web 站点的安全性,并一直大力推广网站采用 https 协议,并通过改变 Chrome用户界面来引导用户,让用户明白采用HTTPS 协议的网站比采用 http 协议的网站更安全可靠,那我们就响应改变

卧槽无情

获取证书

我申请的是 腾讯云 上的免费版 DVSSl 证书,申请审核通过后可以对证书进行下载,有效期是1年。如果自己弄嫌麻烦可以在上面申请(审核一般很快)

注意:由于CA机构和证书代理商策略调整,从2018年1月1日起,同一主域最多只能申请20张亚洲诚信品牌免费型DV版SSL证书

下载的文件中分别有 ApacheIISNginxTomcat 版本的证书,这里只介绍 Nginx 如何配置

配置证书

如果没有安装需要先安装 Nginx ,我们只需配置 Nginx,使其支持 https 即443端口的访问

编辑 /etc/nginx/nginx.conf配置文件,当然路径可能不一样,只要能编辑到nginx.conf文件就行

nginx.conf 文件中一般默认已经有80端口的配置:

	server {
        listen       80 default_server;
        listen       [::]:80 default_server;
        server_name  _;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        	...
        }
	}

加上https 443端口 的配置:


# Settings for a TLS enabled server.
#
    server {
        listen       443 ssl http2 default_server;
        listen       [::]:443 ssl http2 default_server;
        server_name  _;

        ssl_certificate "/etc/pki/nginx/server.crt";
        ssl_certificate_key "/etc/pki/nginx/private/server.key";
        ssl_session_cache shared:SSL:1m;
        ssl_session_timeout  10m;
        ssl_ciphers HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers on;

        # Load configuration files for the default server block.
        include /etc/nginx/default.d/*.conf;

        location / {
        	...
        }

    }

ssl_certificate 字段是证书路径,ssl_certificate_key是私钥路径。将我们之前下载的证书和私钥文件配置到对应路径。

重启 Nginx

修改了 nginx.conf 后别忘了重新 reload Nginx 使其生效

$ nginx -s reload

查看效果

将请求地址从 http://xxx 替换为 https://xxx ,如果可正常访问说明配置成功,浏览器请求地址旁边的标识,已经变成了一个🔐的图标

yeah

其它

如果发现图标还是一个感叹号,标记为连接不安全,这是因为网站中存在 http 的资源,只要将所有 http 资源替换就好了