ssl

免费SSL安全证书Let’s Encrypt安装使用教程(附Nginx/Apache配置)

Let’s Encrypt是最近很火的一个免费SSL证书发行项目,Let’s Encrypt是由ISRG提供的免费免费公益项目,自动化发行证书,但是证书只有90天的有效期。适合个人使用或者临时使用,不用再忍受自签发证书不受浏览器信赖的提示。前段时间一直是内测,现在已经开放了。本教程安装不需要停掉当前Web服务(Nginx/Apache),直接生成证书,废话不多说下面开始:

建议使用git 以后有了新版更新方便,没安装的话Debian/Ubuntu:apt-get install git ,CentOS:yum install git-core
git clone https://github.com/letsencrypt/letsencrypt.git
cd letsencrypt

不安装git的话:wget -c https://github.com/letsencrypt/letsencrypt/archive/master.zip && unzip master.zip && cd letsencrypt-master

LNMP一键安装包都是Nginx/Apache默认支持ssl不需要另外单独编译,接下来先以LNMP一键安装包为例,LNMP用户可以直接参考此教程:

执行:mkdir -p /home/wwwroot/域名/.well-known/acme-challenge 创建临时目录,当然这个.well-known/acme-challenge前面的目录要替换为你自己的网站目录,根据你自己的实际情况修改。

正式开始生成证书
接下来正式进行证书生成操作:
./letsencrypt-auto certonly –email 邮箱 -d 域名 –webroot -w /网站目录完整路径 –agree-tos
如果多个域名可以加多个-d 域名,注意替换上面的邮箱、域名和网站目录,注意这里的网站目录完整路径只是你单纯的网站目录也就是虚拟主机配置文件里的,如Nginx虚拟主机配置里的root,Apache虚拟主机配置里的DocumentRoot。

首先Let’s Encrypt会检测系统安装一些依赖包,安装完依赖包会有蓝色的让阅读TOS的提示,Agree回车 稍等片刻就行了可添加–agree-tos参数屏蔽该窗口。
生成证书后会有如下提示:

IMPORTANT NOTES:
- If you lose your account credentials, you can recover through
e-mails sent to licess@vpser.net.
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/www.vpser.net/fullchain.pem. Your cert will
expire on 2016-03-07. 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 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

Nginx虚拟主机的设置
接下来进行配置Nginx虚拟主机文件,完整配置如下:

server
{
listen 443 ssl;   //如果需要spdy也可以加上,lnmp1.2及其后版本都默认支持spdy,lnmp1.3 nginx 1.9.5以上版本默认支持http2
server_name www.vpser.net;     //这里是你的域名
index index.html index.htm index.php default.html default.htm default.php;
root /home/wwwroot/www.vpser.net;            //网站目录
ssl_certificate /etc/letsencrypt/live/www.vpser.net/fullchain.pem;    //前面生成的证书,改一下里面的域名就行,不建议更换路径
ssl_certificate_key /etc/letsencrypt/live/www.vpser.net/privkey.pem;   //前面生成的密钥,改一下里面的域名就行,不建议更换路径
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:AES256+EECDH:AES256+EDH";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_session_cache shared:SSL:10m;

include wordpress.conf;  //这个是伪静态根据自己的需求改成其他或删除
#error_page 404 /404.html;
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;     //lnmp 1.0及之前版本替换为include fcgi.conf;
#include pathinfo.conf;
}

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
{
expires 30d;
}

location ~ .*\.(js|css)?$
{
expires 12h;
}

access_log off;
}

需将上述配置根据自己的实际情况修改后,添加到虚拟主机配置文件最后面。

添加完需要执行:/etc/init.d/nginx reload 重新载入配置使其生效。

如果需要HSTS,可以加上add_header Strict-Transport-Security “max-age=63072000; includeSubdomains; preload”;

Apache虚拟主机上的设置

Apache在生成证书后也需要修改一下apache的配置文件 /usr/local/apache/conf/httpd.conf ,查找httpd-ssl将前面的#去掉。

然后再执行:
cat >/usr/local/apache/conf/extra/httpd-ssl.conf<

<VirtualHost *:443>
DocumentRoot /home/wwwroot/www.vpser.net   //网站目录
ServerName www.vpser.net:443   //域名
ServerAdmin licess@vpser.net      //邮箱
ErrorLog "/home/wwwlogs/www.vpser.net-error_log"   //错误日志
CustomLog "/home/wwwlogs/www.vpser.net-access_log" common    //访问日志
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/www.vpser.net/fullchain.pem   //改一下里面的域名就行,不建议更换路径
SSLCertificateKeyFile /etc/letsencrypt/live/www.vpser.net/privkey.pem    //改一下里面的域名就行,不建议更换路径
<Directory "/home/wwwroot/www.vpser.net">   //网站目录
SetOutputFilter DEFLATE
Options FollowSymLinks
AllowOverride All
Order allow,deny
Allow from all
DirectoryIndex index.html index.php
</Directory>
</VirtualHost>

需将上述配置根据自己的实际情况修改后,添加到虚拟主机配置文件最后面。注意要重启apache使其实现。执行:/etc/init.d/httpd restart 重启Apache使其生效。

下面说一下可能会遇到的问题:
1、国内DNS服务商可能会不行,目前已知dnspod、cloudxns不行
Namecheap、Route 53的都可以。

2、Linode福利或IPv6用户福利
可能目前Linode用户应该遇到了
An unexpected error occurred:
There were too many requests of a given type :: Error creating new registration :: Too many registrations from this IP
Please see the logfiles in /var/log/letsencrypt for more details.
这个不一定是因为IP注册的次数过多,可能是因为IPv6的事,具体解决方法如下:
执行:sysctl -w net.ipv6.conf.all.disable_ipv6=1 来临时禁用IPv6
再生成证书后执行:sysctl -w net.ipv6.conf.all.disable_ipv6=0 再来解除禁用IPv6

证书续期
最后要说的是续期,因为证书只有90天,所以建议60左右的时候进行一次续期,续期很简单可以交给crontab进行完成,执行:

cat >/root/renew-ssl.sh<

!/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;
}
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值