VPS配置SSL证书启用HTTPS

我的博客已经配置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 粘贴):

  1. sudo yum install git

2)下载证书包

  1. (2017.6月更新:Let's Encrypt 已正式更名为 Certbot )
  2. 新的命令为:
  3. sudo git clone https://github.com/certbot/certbot /opt/letsencrypt

3)进入证书目录

  1. cd /opt/letsencrypt

二、创建并部署 Let’s Encrypt SSL 证书

继续命令行执行:

(2017.6月更新:Let’s Encrypt 已正式更名为 Certbot ) 新的命令为:

  1. ./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 先替换好,然后粘贴执行。

然后等待:

waiting

接着,会询问你是否同意的协议。agree 的话,输入 a,回车。此时就准备创建证书了。

注意:如果你在 VPS 上安装过 ss,那么这一步会提示 443 端口被占用,无法继续。由于 SS 是用服务器的 443 端口,而且目前进程默认开启,所以不能继续安装。此时中止安装,回到 Xshell 命令行界面,输入:service shadowsocks stop  然后回车。会停用 ss,把 443 端口空出来。

stop-ss

如上面截图所示,显示: INFO:loading config from /etc/shadowsocks.json stopped Stopping Shadowsocks success 这表明我们已经关闭了 SS 进程。此时重新粘贴上文蓝色粗体部分的命令(注意 example.com 替换成你的域名),然后回车执行,重新执行安装步骤。

最后成功创建证书。

一般情况下,屏幕显示创建的信息如下:

  1. IMPORTANT NOTES:
  2. - If you lose your account credentials, you can recover them through
  3. e-mails sent to somebody@example.com.
  4. - Congratulations! Your certificate and chain have been saved at
  5. /etc/letsencrypt/live/example.com/fullchain.pem. Your
  6. cert will expire on 2016-03-31. To obtain a new version of the
  7. certificate in the future, simply run Let's Encrypt again.
  8. - Your account credentials have been saved in your Let's Encrypt
  9. configuration directory at /etc/letsencrypt. You should make a
  10. secure backup of this folder now. This configuration directory will
  11. also contain certificates and private keys obtained by Let's
  12. Encrypt, so making regular backups of this folder is ideal.
  13. - If you like Let's Encrypt, please consider supporting our work by:
  14.  
  15. Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
  16. Donating to EFF: https://eff.org/donate-le

此时粘贴执行命令:

  1. sudo ls /etc/letsencrypt/live

会列出该目录下,证书文件存放的网站文件夹,文件夹名就是网站域名。

cer1

注意看一下是主域名还是 www域名。这很重要!一会配置证书路径的时候需要检查一下,保证路径正确!比如,这里显示的是主域名,如图中 pxxxl.com,此时继续粘贴:

  1. sudo ls /etc/letsencrypt/live/pxxxl.com(或可能是www.pxxxl.com

注意上面 pxxxl.com 替换成你的域名。此时会显示创建了 4 个证书。分别是:

  1. cert.pem
  2. chain.pem
  3. fullchain.pem(公钥)
  4. privkey.pem(私钥)

最后两个是我们要用的,需要写到虚拟主机配置文件 conf 里面。

三、修改网站配置文件

用 XFTP 进入 /usr/local/nginx/conf/vhost/ 下的 你的网站的配置文件,通常是 www.xyz.com.conf 文件。下载下来,用 notepad++ 或 Sublime Text 之类的专业的编辑器打开编辑

注意:别用电脑系统自带的记事本,那个只是处理文字用的,会把代码编码弄乱。你可以百度搜索:notepad++,在百度的下载那里选择普通下载,然后下载安装。

CTRL+A 全选中所有代码,删除。然后复制下面我已经配置好的代码,粘贴进入。

  1. server
  2. {
  3. listen 80;
  4. #listen [::]:80;
  5. server_name www.xyz.com xyz.com;
  6. return 301 https://www.xyz.com$request_uri;
  7. }
  8.  
  9. server
  10. {
  11. listen 443 ssl http2;
  12. ssl_certificate /etc/letsencrypt/live/www.xyz.com/fullchain.pem;
  13. ssl_certificate_key /etc/letsencrypt/live/www.xyz.com/privkey.pem;
  14. # 注意检查上面证书的路径,live下的证书文件夹名是否含有www,如果没有,请在上面两行中删除 www.
  15.  
  16. ssl_ciphers "EECDH+CHACHA20:EECDH+CHACHA20-draft:EECDH+AES128:RSA+AES128:EECDH+AES256:RSA+AES256:EECDH+3DES:RSA+3DES:!MD5";
  17. ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
  18. ssl_prefer_server_ciphers on;
  19. ssl_session_cache shared:SSL:10m;
  20.  
  21. # HSTS (ngx_http_headers_module is required) (31536000 seconds = 12 months)
  22. # add_header Strict-Transport-Security "max-age=31536000" always;
  23.  
  24. # OCSP Stapling ---
  25. # fetch OCSP records from URL in ssl_certificate and cache them
  26. ssl_stapling on;
  27. ssl_stapling_verify on;
  28.  
  29. index index.html index.htm index.php default.html default.htm default.php;
  30. server_name www.xyz.com;
  31. root /home/wwwroot/www.xyz.com;
  32.  
  33. include wordpress.conf;
  34. #error_page 404 /404.html;
  35. include enable-php.conf;
  36.  
  37. location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
  38. {
  39. expires 30d;
  40. }
  41.  
  42. location /wp-content/uploads/ {
  43. location ~ .*\.(php)?$ {
  44. deny all;
  45. }
  46. }
  47.  
  48. location ~ .*\.(js|css)?$
  49. {
  50. expires 12h;
  51. }
  52.  
  53. location ~ /\.
  54. {
  55. deny all;
  56. }
  57. access_log off;
  58. }

注意检查一下,把上面所有的 xyz.com 换成你的网站主域名。然后保存。

注意:为了让过程简单一些,我们这先别急着上传覆盖源文件。先别重启 nginx。这一步我们先配置好文件,但先不上传重启 nginx。(如果你心急已经上传哪直接跳到步骤 五 重启后,在进行步骤 

四、把 WordPress 数据库中 HTTP 替换成 HTTPS

登录 WordPress 后台,然后点击插件,安装插件,搜索:Velvet Blues Update URLs  插件,启用。

启用之后,按照图中设置,

replace

点击 Update 按钮。之后在上方会显示进行了哪些替换处理的结果:

replace2

然后,检查一下:

设置(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证书配置完成。

VPS技巧

linux zip压缩和解压缩命令大全

2017-11-7 17:43:36

VPS技巧

Cron自动续期命令失效导致网站SSL证书到期的解决方案

2017-11-23 18:33:08

0 条回复 A文章作者 M管理员
欢迎您,新朋友,感谢参与互动!
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
私信列表
搜索
51La