我的博客已经配置ssl证书启用了https。HTTPS是大势所趋,不管是 B2C 还是 B2B 网站,迟早都要启用。
接着来说怎么给网站从 HTTP 换用 HTTPS。总体来说分为四个步骤:安装 SSL 证书、部署 SSL 证书、修改网站配置文件conf 、网站 URL 中 HTTP 替换为 HTTPS。
一、安装 SSL 证书(Let’s Encrypt)
SSL 证书有免费的也有收费的。具体就不科普了。免费的也可以用,如大名鼎鼎的 Let’s Encrypt SSL certificates.
(2017.6月更新:Let’s Encrypt 已正式更名为 Certbot )
安装证书分两种情况吧。鉴于大多数建站的朋友用虚拟主机 (比如:Bluehost),也有小部分朋友用 VPS 。那么还是分开说:
在虚拟主机上安装证书主要问题是你能接受对方的费用。如Bluehost现在已经提供免费的证书,无需购买独立IP即可安装(第一个网站免费SSL,第二个网站要加SSL就必须升级到独立主机才可以)。
本文主要介绍 VPS 怎样安装部署 SSL 证书并启用 HTTPS。
下载和安装证书
1)先安装 git 包
连接上 VPS 后,在 Xshell 上粘贴命令(每条命令用鼠标右键复制粘贴,回车执行即可。不支持 ctrl+v 粘贴):
sudo yum install git
2)下载证书包
(2017.6月更新:Let's Encrypt 已正式更名为 Certbot )
新的命令为:
sudo git clone https://github.com/certbot/certbot /opt/letsencrypt
3)进入证书目录
cd /opt/letsencrypt
二、创建并部署 Let’s Encrypt SSL 证书
继续命令行执行:
(2017.6月更新:Let’s Encrypt 已正式更名为 Certbot ) 新的命令为:
./certbot-auto certonly --standalone --email 2897xxx@qq.com -d www.example.com -d example.com
注意:
- 上面命令中的 email 地址是方便你接收证书密钥回复以及紧急信息的,尽量填写企业邮箱或者gmail 邮箱,QQ邮箱应该也可以,你可以填写试试。
- 你的网站域名如果是 xyz.com,那么上面就改为:-d www.xyz.com -d xyz.com
建议先把上面命令复制粘贴到记事本里,把 www.example.com 和 example.com 先替换好,然后粘贴执行。
然后等待:
接着,会询问你是否同意的协议。agree 的话,输入 a,回车。此时就准备创建证书了。
注意:如果你在 VPS 上安装过 ss,那么这一步会提示 443 端口被占用,无法继续。由于 SS 是用服务器的 443 端口,而且目前进程默认开启,所以不能继续安装。此时中止安装,回到 Xshell 命令行界面,输入:service shadowsocks stop 然后回车。会停用 ss,把 443 端口空出来。
如上面截图所示,显示: INFO:loading config from /etc/shadowsocks.json stopped Stopping Shadowsocks success 这表明我们已经关闭了 SS 进程。此时重新粘贴上文蓝色粗体部分的命令(注意 example.com 替换成你的域名),然后回车执行,重新执行安装步骤。
最后成功创建证书。
一般情况下,屏幕显示创建的信息如下:
IMPORTANT NOTES: - If you lose your account credentials, you can recover them through e-mails sent to somebody@example.com. - Congratulations! Your certificate and chain have been saved at /etc/letsencrypt/live/example.com/fullchain.pem. Your cert will expire on 2016-03-31. To obtain a new version of the certificate in the future, simply run Let's Encrypt again. - Your account credentials have been saved in your Let's Encrypt configuration directory at /etc/letsencrypt. You should make a secure backup of this folder now. This configuration directory will also contain certificates and private keys obtained by Let's Encrypt, so making regular backups of this folder is ideal. - If you like Let's Encrypt, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le
此时粘贴执行命令:
sudo ls /etc/letsencrypt/live
会列出该目录下,证书文件存放的网站文件夹,文件夹名就是网站域名。
注意看一下是主域名还是 www域名。这很重要!一会配置证书路径的时候需要检查一下,保证路径正确!比如,这里显示的是主域名,如图中 pxxxl.com,此时继续粘贴:
sudo ls /etc/letsencrypt/live/pxxxl.com(或可能是www.pxxxl.com)
注意上面 pxxxl.com 替换成你的域名。此时会显示创建了 4 个证书。分别是:
cert.pem chain.pem fullchain.pem(公钥) privkey.pem(私钥)
最后两个是我们要用的,需要写到虚拟主机配置文件 conf 里面。
三、修改网站配置文件
用 XFTP 进入 /usr/local/nginx/conf/vhost/ 下的 你的网站的配置文件,通常是 www.xyz.com.conf 文件。下载下来,用 notepad++ 或 Sublime Text 之类的专业的编辑器打开编辑
注意:别用电脑系统自带的记事本,那个只是处理文字用的,会把代码编码弄乱。你可以百度搜索:notepad++,在百度的下载那里选择普通下载,然后下载安装。
CTRL+A 全选中所有代码,删除。然后复制下面我已经配置好的代码,粘贴进入。
server { listen 80; #listen [::]:80; server_name www.xyz.com xyz.com; return 301 https://www.xyz.com$request_uri; } server { listen 443 ssl http2; ssl_certificate /etc/letsencrypt/live/www.xyz.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/www.xyz.com/privkey.pem; # 注意检查上面证书的路径,live下的证书文件夹名是否含有www,如果没有,请在上面两行中删除 www. ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5"; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; # HSTS (ngx_http_headers_module is required) (31536000 seconds = 12 months) # add_header Strict-Transport-Security "max-age=31536000" always; # OCSP Stapling --- # fetch OCSP records from URL in ssl_certificate and cache them ssl_stapling on; ssl_stapling_verify on; index index.html index.htm index.php default.html default.htm default.php; server_name www.xyz.com; root /home/wwwroot/www.xyz.com; include wordpress.conf; #error_page 404 /404.html; include enable-php.conf; location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ { expires 30d; } location /wp-content/uploads/ { location ~ .*\.(php)?$ { deny all; } } location ~ .*\.(js|css)?$ { expires 12h; } location ~ /\. { deny all; } access_log off; }
注意检查一下,把上面所有的 xyz.com 换成你的网站主域名。然后保存。
注意:为了让过程简单一些,我们这先别急着上传覆盖源文件。先别重启 nginx。这一步我们先配置好文件,但先不上传重启 nginx。(如果你心急已经上传哪直接跳到步骤 五 重启后,在进行步骤 四)
四、把 WordPress 数据库中 HTTP 替换成 HTTPS
登录 WordPress 后台,然后点击插件,安装插件,搜索:Velvet Blues Update URLs 插件,启用。
启用之后,按照图中设置,
点击 Update 按钮。之后在上方会显示进行了哪些替换处理的结果:
然后,检查一下:
设置(Setting)-常规(General) 那里,WordPress地址 和 网站地址(Site URL) 是不是都改成 https 了。如:https://www.xyz.com
如果还是 http,请手动修改一下。修改之后,系统会立即把你登出后台。
五、上传网站配置文件,重启 nginx
上传第三步我们保存的 www.xyz.com.conf 覆盖掉原文件,
接着 Xshell 执行:service nginx restart
OK,此时 访问你的网站,会自动跳转到 https。
OK,此时再访问首页,已经是绿色小锁加持了!
不管是谷歌浏览器,360浏览器,火狐浏览器都有绿色小锁加持。
六、我都做了,为什么看不到小绿锁?
可能有些人完成第五步后,发现 chrome 浏览器 https 左边并没有出现绿色的小锁啊?
如果你是新装 WordPress,这一步必显示绿色小锁。
如果你是网站搬家,把之前的网站搬过来的,那么可能会不显示小锁。如果你每一步都做好了,但是还是不显示小绿锁,那么只能说,你的数据库中调用的资源虽然都是 https 的,但是页面存在仍用 http 调用的资源。最常见的可能是:
某个主题的 banner图片,你在 主题设置 里面填写的某个资源(多数是图片) 的URL 地址是死的,并不会被存入数据库,所以用插件替换不掉。比如:http:www.xyz.com/wp-content/upload/2016/xx/xxxx.jpg
类似这样在主题设置里写死的 URL 里的 http,插件是没有办法替换到的。所以你要自己去检查是否有调用 https:// 的资源。把这些改成 https:// 就会正常出现小绿锁了。
利用工具检测ssl证书有没有生效。
https://www.sslshopper.com/ssl-checker.html
七、关于免费的 Let’s Encrypt SSL 证书的说明
免费的 L et’s Encrypt SSL certificates 的有效期一般是 90天,90天之后可以再续期。也不麻烦,执行命令行即可。
八、可以让证书到期自动续期吗?
可以!利用 cron 可以让证书到期自动续期。
关于自动续期,建议看看这篇文章:Cron自动续期命令失效导致网站SSL证书到期的解决方案
九、如果同一个vps下有两个网站,怎么给第二个网站配置 https?
多个网站进行配置https教程:VPS配置多域名SSL证书
这到里SSL证书配置完成。