想到来启用https,想必应该也知道ssl的作用了。最主要其实就是为了防止访问你网站的用户跟你网站服务器直接的交换数据或者说通信被窃取,比如:用户登录你网站的用户密码。
不废话,直接进入主题。
我的vps是centos6 64位的,网站所使用的环境是这哥们的lnmpa一键安装包:https://blog.linuxeye.com/31.html
一,首先,确保你网站域名使用的dns不是国内的,比如万网,dnspod之类的,dnspod国际版本也不行,我一开始就使用的dnspod国际版本,结果报错:
Error: The server could not connect to the client
推荐使用cloudflare,同时域名要解析到vps上来,否则也无法正常获取证书。
网站在使用他脚本搭建的时候,不要选择ssl,否则脚本配置文件,修改很蛋疼。咱们只要先直接搭建普通http网站即可。
网站搭建好了,再进行下一步。
二,关闭nginx,因为Let’s Encrypt会占用80端口来验证咱们域名的所有权。
然后进入咱们网站目录的上一级建个文件夹,用来安装运行Let’s Encrypt
这里,我的网站路径为:/data/wwwroot/www.nuluzheng.com
service nginx stop
cd /data/wwwroot/
mkdir ssl
cd ssl
git clone https://github.com/letsencrypt/letsencrypt
cd letsencrypt
./letsencrypt-auto certonly -d nuluzheng.com -d www.nuluzheng.com --debug
这里注意,–debug这个要复制进去,我一开始就是没复制这个,导致报错
WARNING: Python 2.6 support is very experimental at present…
if you would like to work on improving it, please ensure you have backups
and then run this script again with the –debug flag!
另外最后不带www以及带www都要申请,他会整到一个证书里,当然,如果你有这个域名的其他二级域名,也想使用这个证书,可以一起写进去。
三,如果没有报其他错误的话,然后进入 /etc/letsencrypt/live/nuluzheng.com 这个目录下,应该可以看到证书了。
一共有四个文件,我们用到的只是其中两个文件,不过,咱们不用管他,看到有文件在,就ok。
cert.pem chain.pem fullchain.pem privkey.pem
四,接下来,我们修改配置文件。
原来默认的配置文件是:
server {
listen 80;
server_name www.nuluzheng.com nuluzheng.com;
access_log off;
index index.html index.htm index.php;
root /data/wwwroot/www.nuluzheng.com;
if ($host != www.nuluzheng.com) {
rewrite ^/(.*)$ $scheme://www.nuluzheng.com/$1 permanent;
}
location / {
try_files $uri @apache;
}
location @apache {
proxy_pass http://127.0.0.1:88;
include proxy.conf;
}
location ~ .*\.(php|php5|cgi|pl)?$ {
proxy_pass http://127.0.0.1:88;
include proxy.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
}
咱们把他改为:
server {
listen 80;
server_name www.nuluzheng.com;
rewrite ^(.*)$ https://$host$1 permanent;
}
server {
server_name nuluzheng.com;
return 301 https://www.nuluzheng.com$request_uri;
}
server {
listen 443 ssl;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:kEDH+AESGCM:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:DHE-RSA-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA256:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA:DHE-RSA-AES256-SHA:AES128-GCM-SHA256:AES256-GCM-SHA384:AES128-SHA256:AES256-SHA256:AES128-SHA:AES256-SHA:AES:CAMELLIA:DES-CBC3-SHA:!aNULL:!eNULL:!EXPORT:!DES:!RC4:!MD5:!PSK:!aECDH:!EDH-DSS-DES-CBC3-SHA:!EDH-RSA-DES-CBC3-SHA:!KRB5-DES-CBC3-SHA';
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;
ssl_dhparam /opt/dhparam/keys/dhparams.pem;
ssl_certificate /etc/letsencrypt/live/nuluzheng.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/nuluzheng.com/privkey.pem;
server_name www.nuluzheng.com nuluzheng.com;
access_log off;
index index.html index.htm index.php;
root /data/wwwroot/www.nuluzheng.com;
if ($host != www.nuluzheng.com) {
rewrite ^/(.*)$ $scheme://www.nuluzheng.com/$1 permanent;
}
location / {
try_files $uri @apache;
}
location @apache {
proxy_pass http://127.0.0.1:88;
include proxy.conf;
}
location ~ .*\.(php|php5|cgi|pl)?$ {
proxy_pass http://127.0.0.1:88;
include proxy.conf;
}
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf|flv|ico)$ {
expires 30d;
access_log off;
}
location ~ .*\.(js|css)?$ {
expires 7d;
access_log off;
}
}
因为配置文件里,有这一句, ssl_dhparam /opt/dhparam/keys/dhparams.pem;
所以咱们还得生成这个。
cd /opt
mkdir dhparam
cd dhparam
mkdir keys
cd keys
openssl dhparam -out dhparams.pem 2048
cd ../
chmod 700 keys
openssl dhparam -out dhparams.pem 2048 执行这一步骤,需要等待的时间有点长。可能要两三分钟,咱们耐心等待一会即可。
五,ok,搞定,启动nginx即可。如果你不喜欢用cloudflare的dns,这个时候,可以再把dns切换回来。
service nginx start
网站已经实现https了,拿到https://www.ssllabs.com测试一下安全性。
嗯不错,评级为A。