SSL安全证书Let’s Encrypt安装使用教程(启用https)

作者: sinyu 分类: Linux,随便写写 发布时间: 2018-01-20 10:09

HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。https可以保证你网站数据数据传输的安全性。

Let’s Encrypt是最近很火的一个免费SSL证书发行项目,Let’s Encrypt是由ISRG提供的免费免费公益项目,自动化发行证书,但是证书只有90天的有效期。适合个人使用或者临时使用。 下面直接上教程: 1、 首先,ssh登录自己的服务器,root的权限下:

Git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt

2、 正式开始生成证书(如果多个域名可以加多个-d 域名)

./letsencrypt-auto certonly –email 邮箱 -d 域名 –webroot -w /网站目录完整路径 –agree-tos –debug

3、 等待那么一会会,这边如果遇到问题可以下翻常见问题的解决,如果正确生成好证书会出现下图的提示: 人生日历截图20160116110743.png 这里生成成功后你可以 cd 打开 /etc/letsencrypt/live/(域名) 查看证书: 人生日历截图20160116110932.png 4、 接着配置dhparams长度

mkdir -p /opt/dhparam/keys
openssl dhparam -out /opt/dhparam/keys/dhparams.pem 2048
sudo chmod 700 /opt/dhparam/keys

5、 接下来进行配置Nginx虚拟主机文件,如果你用的是lnmp路径为:/usr/local/nginx/conf/vhost ,ls 命令来查看你的域名配置文件,vi编辑它,完整配置如下:

server {
listen 80;
server_name www.sinyu1012.cn;  //域名
rewrite ^ https://$server_name$request_uri? permanent;
}
server {
listen 443 ssl;
server_name  www.sinyu1012.cn; //域名
ssl_certificate /etc/letsencrypt/live/www.sinyu1012.cn/fullchain.pem;  //将里面的域名替换成你的域名
ssl_certificate_key /etc/letsencrypt/live/www.sinyu1012.cn/privkey.pem; //将里面的域名替换成你的域名
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;
access_log /home/wwwlogs/sinyu1012.cn.log access;//将里面的域名替换成你的域名
index index.html index.htm index.php;
root /home/wwwroot/www.sinyu1012.cn;  //网站目录
if ($host = www.$server_name) {
rewrite ^(.) https://$server_name$request_uri? permanent;
}
location ~ .
.php(/.)$
{
# comment try_files $uri =404; to enable pathinfo
try_files $uri =404;
fastcgi_pass  unix:/tmp/php-cgi.sock;
fastcgi_index index.php;
include fastcgi.conf;
#include pathinfo.conf;
set $path_info “”;
set $real_script_name $fastcgi_script_name;
if ($fastcgi_script_name ~ “^(.+?.php)(/.+)$”) {
set $real_script_name $1;
set $path_info $2;
}
fastcgi_param SCRIPT_FILENAME $document_root$real_script_name;
fastcgi_param SCRIPT_NAME $real_script_name;
fastcgi_param PATH_INFO $path_info;
}
location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
{
expires      30d;
}
location ~ .
.(js|css)?$
{
expires      12h;
}
location ~* .(eot|ttf|woff)$
{
add_header Access-Control-Allow-Origin ‘*’;
}
}

配置完后需要执行:/etc/init.d/nginx reload 重新载入配置使其生效,或者 /etc/init.d/nginx restart 重启。 下面说一下可能会遇到的问题: 1、如果在生成证书的时候出现下面的错误提示:

Creating virtual environment…
./letsencrypt-auto: line 167: virtualenv: command not found

可以查找下上面是否有No package Python-virtualenv available. Nothing to do这样的提示,若是有就说明是python-virtualenv没有安装,安装如下:

yum install python-setuptools
easy_install virtualenv

2、国内DNS服务商可能会不行,目前已知dnspod、cloudxns不行
Namecheap、Route 53的都可以。 证书续期 最后要说的是续期,因为证书只有90天,所以建议60左右的时候进行一次续期,续期很简单可以交给crontab进行完成,执行:
cat >/root/renew-ssl.sh<<EOF
#!/bin/bash
mkdir -p /网站目录完整路径/.well-known/acme-challenge
/root/letsencrypt/letsencrypt-auto –renew-by-default certonly –email 邮箱 -d 域名 –webroot -w /网站目录完整路径 –agree-tos
EOF
chmod +x /root/renew-ssl.sh
注意要修改上面letsencrypt-auto的路径为你自己的,并且里面的邮箱和域名也要修改。
再crontab里添加上:0 3 */60 * * /root/renew-ssl.sh 具体crontab教程点击查看
2015.12.13更新
官网更新了参数,对本文进行了部分参数的调整。原-a webroot –webroot-path=/网站目录完整路径替换为–webroot -w;–renew替换为–renew-by-default;增加–agree-tos参数。
同时这里提醒一下如果设置了http 301跳到https的用户,再续期前还需要在nginx设置如下:
80端口的虚拟主机上需要添加上,不加的话会无法验证的
location /.well-known/ {
add_header Content-Type ‘text/plain;’;
root /网站目录完整路径;
}
附完整的nginx下301 http跳到https的配置:
server
{
listen 80;
server_name www.vpser.net;
location /.well-known/ {
add_header Content-Type ‘text/plain;’;
root /网站目录完整路径;
}
location / {
return 301 https://www.vpser.net$request_uri;
}
}
 

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!

发表评论

电子邮件地址不会被公开。 必填项已用*标注