给网站添加ssl证书(https)

环境: centos 7, nginx


nginx 安装ssl模块

nginx安装 –with-http_ssl_module
由于安装nginx时,没考虑用到ssl,所以没有安该模块。
安装nginx时,使用的是默认的安装路径,即 /usr/local/nginx, nginx 可执行文件在 /usr/local/nginx/sbin/下面。
现在安装ssl模块:

1、 生成文件
进入nginx安装文件目录,执行:

/configure  --with-http_ssl_module 
make

2、 替换nginx
在nginx安装文件目录下面,会生成一个 objs 目录,将 objs/nginx替换 /usr/local/nginx/sbin/nginx(两者都是nginx的可执行文件)。
重启nginx服务就行。 /usr/local/nginx/sbin/nginx -s reload


certbot 部署 ssl 证书

1、 根据certbot 官网https://certbot.eff.org/lets-encrypt/centosrhel7-nginx 提示, 安装yum 源

 yum install https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm

2 、安装 certbot

sudo yum install python2-certbot-nginx

上面安装成功了,不代表certbot就能使用了。 在命令执行

certbot

如果只是提示权限不够,参数不正确,表示可以使用。
如果缺少依赖,会报错,依据错误安装依赖。一般的情况是默写python 包版本过低。卸载重装。

3、 生成 证书
条件: 已经在nginx 配好域名的服务了,比如

server {
   listen   80;
   server_name example.com;
   location  /  {
     root /home/to/web/dist/;
     index index.html;
   }
}

nginx 目录 /usr/local/nginx
要加证书的域名 example.com

执行生成命令:

sudo certbot certonly --standalone --nginx --nginx-server-root=/usr/local/nginx/conf -d api.example.online

具体命令解释见certbot文档介绍。此处对参数 nginx-server-root进行说明:
nginx-server-root 是用来指定nginx服务的根目录( Nginx server root directory )。certbot文档中的使用示例中,是没加这个参数,使用了默认的路径(/etc/nginx)。 在现在nginx的安装路径是 /usr/local/nginx 的情况下。 如果像文档中那样执行 sudo certbot certonly -nginx 会报错,找不nginx。在网上看到的解决此错误的方法是, 将nginx 服务通过 软连接 或者 重装nginx,使其根目录 处于 /etc/nginx 下。这种做法比较麻烦,直接加参数 nginx-server-root 进行指定即可。

说明
以上命令中,不加 standalone ,之后会提示你选择三种模式的一种;如果不加域名, 会检测nginx中配置的域名,并让你选择为哪些域名生成ssl;等等。

4、 由于以上命令中未指定 生成的证书的存放地址。默认会放在

/etc/letsencrypt/live/

在目录下面会有 以域名命令的目, 比如本处会有一个 example.com 目录,该目录下面会有以下文件:

cert.pem  chain.pem  fullchain.pem  privkey.pem  README

5、 配置nginx
在相应域名的server中添加如下配置:

 ssl_certificate XXX/fullchain.pem; # 修改为fullchain.pem所在的路径
ssl_certificate_key XXX/privkey.pem; # 修改为privkey.pem所在的路径

listen 80;改为

listen  443  ssl;

即上面的示例配置server可改为:

server {
   listen       443    ssl;
   ssl_certificate  /etc/letsencrypt/live/example.com/fullchain.pem;
   ssl_certificate_key  /etc/letsencrypt/live/example.com/privkey.pem;

   server_name example.com;
   location  /  {
     root /home/to/web/dist/;
     index index.html;
   }
}

重新加载 nginx 配置。

/usr/local/nginx/sbin/nginx -s reload

即可访问 https://example.com

6、 http 跳转到 https
如果想 http://example.com 自动 跳转到 https://example.com
在nginx中还需要添加一个 server配置,域名一样

server {
   listen      80;
   server_name example.com;
   rewrite ^(.*)$ https://$host$1 permanent;
}

当然,这种跳转方法不止这一种,网上还可以看到其他别的配置方法。

7、 证书
由于证书有效期仅90天,设置让它每周检查一次(有效期小于30天才更新)

0 22    * * 6      certbot renew --dry-run  && /usr/local/nginx/sbin/nginx -s reload  

在证书过期时自动更新。

后记: 网上介绍的免费的ssl证书,很多都已经收费了。

错误记录:
1- 执行:sudo certbot certonly --standalone --nginx --nginx-server-root=/usr/local/nginx/conf -d data.example.online
错误:Too many flags setting configurators/installers/authenticators ‘nginx’ -> ‘webroot’
解决:

sudo certbot certonly --nginx --nginx-server-root=/usr/local/nginx/conf 

然后根据提示选择相应的域名进行生成证书。
参考文章:
https://certbot.eff.org/docs/using.html#certbot-commands

https://blog.csdn.net/u014801157/article/details/80106494

https://www.jianshu.com/p/fb3733cd0d3b

猜你喜欢

转载自blog.csdn.net/a1368783069/article/details/80719768