HTTP+SSL

云ESC部署SSL详细方法

  • 系统CentOS 7.3 64位 + 环境 Nginx 采用LNMP一键包

  • 免费SSL 腾讯 阿里都提供 以腾讯云为例 TrustAsia TLS RSA CA

  • 直接申请验证域名信息即可 获取不同环境的crt key

第一步、部署HTTPS基础准备

 申请SSL 了解直接服务器部署环境 选择对应的

第二步 上传和部署SSL证书

A - 把上面的一个CRT一个KEY文件上传到VPS
 ROOT目录中,然后对应修改成SSL.CRT和SSL.KEY文件名,或者我们用作其他命令都可以。

B - 解密私钥和设置权限

1
2
openssl rsa -in ssl.key -out /root/ssl.key
chmod 600 /root/ssl.key

登录SSH,执行上述两行脚本,解密私钥和授权。


第三步 在LNMP环境部署站点SSL设置

我们需要在已有的LNMP添加了站点,然后在站点对应的CONF文件设置。

在”/usr/local/nginx/conf/vhost/“目录文件中,找到对应站点的conf文件,然后修改设置如下

1
2
3
4
5
6
7
8
9
10
server
{
listen 80;
listen 443 ssl; #1
#listen [::]:80;
ssl on; #2
ssl_certificate /root/ssl.crt; #3
ssl_certificate_key /root/ssl.key; #4
server_name 1114.me www.1114.me;
}
上面的#1 2 3 4标注部分是需要我们添加的,对应路径我们要与之前上传的CRT和KEY文件路径对应以及文件名不要搞错。

补充官方说明:

Nginx 证书部署
获取证书
Nginx文件夹内获得SSL证书文件 1_www.domain.com_bundle.crt 和私钥文件 2_www.domain.com.key,
1_www.domain.com_bundle.crt 文件包括两段证书代码 “—–BEGIN CERTIFICATE—–”和“—–END CERTIFICATE—–”,
2_www.domain.com.key 文件包括一段私钥代码“—–BEGIN RSA PRIVATE KEY—–”和“—–END RSA PRIVATE KEY—–”。

证书安装

将域名www.domain.com的证书文件1_www.domain.com_bundle.crt 、私钥文件2_www.domain.com.key保存到同一个目录,例如/usr/local/nginx/conf目录下。
更新Nginx根目录下 conf/nginx.conf 文件如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
server {
listen 443;
server_name www.domain.com; #填写绑定证书的域名
ssl on;
ssl_certificate 1_www.domain.com_bundle.crt;
ssl_certificate_key 2_www.domain.com.key;
ssl_session_timeout 5m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #按照这个协议配置
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE;#按照这个套件配置
ssl_prefer_server_ciphers on;
location / {
root html; #站点目录
index index.html index.htm;
}
}

配置完成后,先用bin/nginx -t来测试下配置是否有误,正确无误的话,重启nginx。就可以使 https://www.1114.me 来访问了。


  • 注:
配置文件参数 标准 说明
listen 443 SSL访问端口号为443
ssl on 启用SSL功能
ssl_certificate 证书文件
ssl_certificate_key 私钥文件
ssl_protocols 使用的协议
ssl_ciphers 配置加密套件,写法遵循openssl标准

最后,我们重启LNMP,可以看到SSL证书生效,且HTTPS可以访问站点。
重启LNMP命令

  • 使用全站加密,http自动跳转https(可选)
    对于用户不知道网站可以进行https访问的情况下,让服务器自动把http的请求重定向到https。
    在服务器这边的话配置的话,可以在页面里加js脚本,也可以在后端程序里写重定向,当然也可以在web服务器来实现跳转。Nginx是支持rewrite的(只要在编译的时候没有去掉pcre)
    在http的server里增加rewrite ^(.*) https://$host$1 permanent;
    这样就可以实现80进来的请求,重定向为https了。

  • 像这样就可以了

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

server {
listen 443;
server_name 1114.me www.1114.me;
ssl on;
root html;
index index.html index.htm;
ssl_certificate /root/ssl.pem;
ssl_certificate_key /root/ssl.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 / {
root html;(/EG/EG/站点目录)
index index.html index.htm;
}
}
  • 如果想要强制 HTTPS,请做如下修改:
1
2
3
4
5
6
7
8
9
10
11
12
-------------------------------------------------------------------------------
server
{
listen 80;
server_name 1114.me www.1114.me; # 修改为你的域名
rewrite ^/(.*) https://www.1114.me/$1 permanent; # 如果你的网站是带 www 的,请在域名前添加 www
}
-------------------------------------------------------------------------------server #接上段配置即可
{
listen 443;
# ...... 其余配置同上
}

LNMP状态管理命令:

LNMP状态管理: /root/lnmp {start|stop|reload|restart|kill|status}

Nginx状态管理:/etc/init.d/nginx {start|stop|reload|restart}

MySQL状态管理:/etc/init.d/mysql {start|stop|restart|reload|force-reload|status}

Memcached状态管理:/etc/init.d/memcached {start|stop|restart}

PHP-FPM状态管理:/etc/init.d/php-fpm {start|stop|quit|restart|reload|logrotate}

PureFTPd状态管理: /etc/init.d/pureftpd {start|stop|restart|kill|status}

ProFTPd状态管理: /etc/init.d/proftpd {start|stop|restart|reload}

  • 如重启LNMP,输入命令:/root/lnmp restart 即可,单独重启mysql:/etc/init.d/mysql restart