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 粘贴):

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

然后等待:

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 替换成你的域名),然后回车执行,重新执行安装步骤。

最后成功创建证书。

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

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

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

cer1

注意看一下是主域名还是 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  插件,启用。

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

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管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索