为网站配置ssl证书
ssl证书简单介绍
SSL证书,用于加密HTTP协议,也就是HTTPS。它分为三种类型,域名型SSL证书(DV SSL)、企业型SSL证书(OVSSL)、增强型SSL证书(EVSSL)。
域名型 SSL 证书(DV SSL - Domain Validation SSL)
即证书颁布机构只对域名的所有者进行在线检查,通常是验证域名下某个指定文件的内容,或者验证与域名相关的某条 TXT 记录;
比如访问 [http|https]://www.mimvp.com/…/test.txt,文件内容: 2016082xxxxxmimvpcom2016或添加一条 TXT 记录:www.mimvp.com –> TXT –> 20170xxxxxmimvpcom2066
企业型 SSL 证书(OV SSL - Organization Validation SSL)
是要购买者提交组织机构资料和单位授权信等在官方注册的凭证,证书颁发机构在签发 SSL 证书前,不仅仅要检验域名所有权,还必须对这些资料的真实合法性进行多方查验,只有通过验证的才能颁发 SSL 证书。
增强型 SSL 证书(EV SSL - Extended Validation SSL)
与其他 SSL 证书一样,都是基于 SSL/TLS 安全协议,但是验证流程更加具体详细,验证步骤更多,这样一来证书所绑定的网站就更加的可靠、可信。它跟普通 SSL 证书的区别也是明显的,安全浏览器的地址栏变绿,如果是不受信的 SSL 证书则拒绝显示,如果是钓鱼网站,地址栏则会变成红色,以警示用户。说白了它们的安全性一个比一个要高,像我们这些个人的网站用第一种就可以了,而且只有第一种有免费的。当然你有钱的话去购买也没人拦着你。
给自己网站配置SSL证书
网站环境
- 阿里云服务器
- 七牛云图片服务器
- nginx服务器
申请证书
阿里云控制台->产品与服务->SSL证书(应用安全)->点击购买证书
由于我这里还要给二级域名指向的图片服务器配置ssl,所以购买了两个
//todo
购买好证书后接下来就是申请证书,在证书列表中点击申请证书
下一步验证信息,由于我的域名在阿里云直接自动验证就可以了。
验证好后下载需要选择证书类型,一级域名选择nginx,二级域名由于解析到图片服务器,在服务器类型里选择其他,一切设置好后就可以下载证书了,如下:
安装证书
nginx
-
在证书下载页面中定位到Nginx服务器,并单击右侧操作栏的下载,将Nginx服务器证书压缩包下载到本地。
-
解压已下载保存到本地的Nginx证书压缩包文件。
解压后的文件夹中有2个文件:
- 证书文件:以.pem为后缀或文件类型为PEM。
- 密钥文件:以.key为后缀或文件类型为KEY。
-
登录您的Nginx服务器,在Nginx安装目录(Nginx默认安装目录为/usr/local/nginx/conf)执行以下命令创建cert目录。
1 2
cd /usr/local/nginx/conf #进入Nginx默认安装目录。此处为Nginx默认安装目录,请您根据实际配置情况操作。 mkdir cert #创建cert证书目录。
-
上传证书到云服务器
1
scp 4712219_cana.space.pem root@47.97.9.157:/root/
-
编辑nginx配置文件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
user root; worker_processes 1; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; charset utf-8; # 设置编码格式 server { listen 80; server_name cana.space; rewrite ^(.*)$ https://${server_name}$1 permanent; } server { listen 443 default ssl; # 端口号 默认使用ssl server_name cana.space; # 配置域名信息 root web; index index.html; ssl_certificate cert/4712219_cana.space.pem; # 替换成自己的 ssl_certificate_key cert/4712219_cana.space.key; # 替换成自己的 ssl_session_timeout 5m; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; location /favicon.ico { root web; } # 使用相对协议实现当网站引入的都是 http 资源,网站域名更换为 https 后的无缝切换 location / { add_header Content-Security-Policy upgrade-insecure-requests; } } }
-
重启服务器
1 2
cd /usr/local/nginx/sbin #进入Nginx服务器的可执行目录sbin。 ./nginx -s reload #重启Nginx服务器。
在重启后出现如下错误,说明未安装http_ssl_module模块,我们只需要在原有的基础上添加ssl模块就行了。
1
nginx:[emerg]unknown directive ssl错误
解决步骤:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
# 来到解压目录 cd /opt/nginx-1.12.0 # 重新添加ssl模块 ./configure --with-http_ssl_module # 重新编译 make # 在我们执行完做命令后,我们可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可。 cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak cp objs/nginx /usr/local/nginx/sbin/nginx # 如果服务器在运行中会报一个错,将nginx进程kill掉即可 # 查看ssl模块是否安装成功,看到--with-http_ssl_module字样表示安装成功 ./sbin/nginx -V # 重新启动 ./sbin/nginx
-
服务器安全组开发443端口
-
测试访问cana.space,ok
如果出现以下错误
1
SSL received a record that exceeded the maximum permissible length ERR_SSL_PROTOCOL_ERROR
需要修改server里面的 listen 443; 为 listen 443 default ssl; 保存,重启Nginx。
七牛云
由于网站使用了ssl,内部任何形式的资源加载都必须是 https,包括 css,js,ajax,图片,iframe 等各种形式的,所以使用到的图片访问也必须是https,当然也可以使用nginx反向代理将https图片访问模式反向代理到非https
-
七牛云控制台->SSL证书服务->上传自有证书
- 证书备注名 随便写
- 证书内容 ( PEM格式 ) 使用文本工具打开 4713157_img.cana.space.pem 复制内容
- 证书私钥 ( PEM格式 ) 使用文本工具打开 4713157_img.cana.space.key 复制内容
-
配置HTTPS
cdn->域名管理->配置->HTTPS配置—>选择已有证书,配置如下
至此,ssl配置完成
遗留问题解决
https访问非http
由于网站安装了ssl,在一个 https 页面里动态的引入 http 资源,比如引入七牛云上的图片,会被直接 block 掉。按照上面的操作步骤,现在已经在七牛云上同时准备了 https 资源和 http 资源,那么可以使用相对协议实现当网站引入的都是 http 资源,网站域名更换为 https 后的无缝切换。具体做法就是在nginx配置文件中加入一个文件头:
|
|
ssl证书有效期
由于ssl证书只有1年有效期,一年之后需要更换,更换步骤:
-
一级域名更换
给一级域名重新申请证书,nginx配置文件替换证书
-
二级域名更换
七牛云管理后台修改证书配置,将证书内容和证书私钥替换掉即可
阿里云版本升级后证书过期后重新购买是一揽子购买,先一次性购买20个,再一个一个创建,如下
创建好后再分别申请cana.space和img.cana.space两个域名的证书,验证和提交审核后一会儿就签发了,接下来按照上文下载证书并安装即可。
成功替换好证书后访问网站,并点击链接左侧小锁,有效,可以看到有效期已更新
同理七牛云证书上传好后设置https配置,替换成新的证书
点击确认等域名处理完毕后,访问https://img.cana.space/ 点击小锁可以看到有效期已经更新了。
等域名状态变成成功后,查看有效期