查看自己的服务器配置:CentOS release 6.5 (Final)
命令: cat /etc/issue 或cat /etc/redhat-release
查看系统多少位:getconf LONG_BIT
一、配置Nginx
首先安装系统缺少的包:
yum -y install gcc gcc-c++ make libtool zlib zlib-devel openssl openssl-devel pcre pcre-devel
安装稳定版的Nginx:
wget http://nginx.org/download/nginx-1.10.2.tar.gz
下载到/usr/local目录下
tar –zxvf Nginx-1.10.2.tar.gz
./configure --prefix=/usr/local/Nginx1.10 --with-http_stub_status_module --with-http_ssl_module
(后面两项是Nginx缺少http_ssl_module模块,配置ssl后Nginx启动失败,提示一下错误:Nginx: [emerg] the “ssl” parameter requires ngx_http_ssl_module in /usr/local/Nginx/conf/Nginx.conf)
–prefix=PATH : 指定Nginx的安装目录。默认 /usr/local/Nginx
–with-http_ssl_module : 使用https协议模块。默认情况下,该模块没有被构建。前提是openssl与openssl-devel已安装
–with-http_stub_status_module : 用来监控 Nginx 的当前状态
配置后输入以下命令:
make && make install
安装后启动项目:进入sbin目录
启动:./Nginx
关闭:./Nginx –s stop
考虑到安装let’s Encrypt需要占用80端口,可以先关闭Nginx
二、 如果已经安装过Nginx,但是未配置ngx_http_ssl_module模块
需要重新配置:
./configure --prefix=/usr/local/Nginx1.10 --with-http_stub_status_module --with-http_ssl_module
配置完成后,需要安装make,不用运行make install(会被覆盖安装)
将之前安装的Nginx备份
cp Nginx Nginx.bak
停止Nginx
将重新编译完成的Nginx覆盖原有的Nginx
cp ./objs/Nginx /usr/local/Nginx1.10/sbin/
然后启动重新查看是否添加成功
/usr/local/Nginx1.10/sbin/Nginx -V
三、 配置Let‘s Encrypt
系统要求:官方文档上已经写出支持python2.6或2.7的操作系统上,python3.x有望在未来支持;需要使用Root账户安装,有写入文件/etc/letsencrypt,/var/log/letsencrypt,/var/lib/letsencrypt的权限,安装时需要使用80和443端口
首先安装git 和bc,并从github上将代码克隆到本地
sudo yum –y git bc
sudo git clone https://github.com/certbot/certbot /opt/certbot-master
安装所有依赖:
sudo /opt/certbot-master/letsencrypt-auto --help
(安装过程请耐心等待)
绑定域名使用 standalone 的方式来获取证书。这种方式需要把 Nginx 服务停掉,让 standalone 服务器直接占用 80 端口来等待 Let’s Encrypt 服务端的验证。
sudo /opt/certbot-master/letsencrypt-auto --help –standalone –email 邮箱地址(邮箱地址是用来接收紧急通知和找回密钥的) –d 域名
中间会出现界面验证你的邮箱地址是否有效
命令完成后,最新版本的证书位置:/etc/letsencrypt/live/域名/
每个域名一个目录,有以下文件:
cert.pem 申请的服务器证书文件
privkey.pem 服务器证书对应的私钥
chain.pem 除服务器证书外,浏览器解析所需的其他全部证书,比如根证书和中间证书
fullchain.pem 包含服务器证书的全部证书链文件
sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
- 修改80端口的监听
server
{
listen 80;
return 301 https://域名$request_uri;
server_name 域名 域名;
}
server {
listen 443 ssl;
server_name 域名;
ssl_certificate /etc/letsencrypt/live/域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/域名/privkey.pem;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
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_session_timeout 1d;
ssl_session_cache shared:SSL:50m;
ssl_stapling on;
ssl_stapling_verify on;
add_header Strict-Transport-Security max-age=15768000;
# The rest of your server block
root /path/to/root;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}
配置完成后重启Nginx
在谷歌浏览器中输入域名,谷歌浏览器查看详情
或者通过此网址查询:https://www.ssllabs.com/ssltest/analyze.html?d=域名
自动续期问题:(注意关闭Nginx)输入
./letsencrypt-auto renew
手动续期会发现提示还未到期,无法续期
可以使用
./letsencrypt-auto renew --force-renewal