• 已删除用户
Administrator
发布于 2020-12-22 / 30 阅读 / 0 评论 / 0 点赞

centos7配置https证书

nginx配置ssl证书Let’s Encrypt

1.Let’s Encrypt

如果要启用 HTTPS,我们需要一个 CA 证书,Let’s Encrypt 是一个免费的证书颁发机构,由 ISRG(Internet Security Research Group)运作。

2.使用 Certbot 获取证书

Certbot 是 Let’s Encrypt 官方推荐的证书获取工具,它可以帮助很方便的获取和更新 Let’s Encrypt 证书,Certbot 支持所有 Unix 内核的操作系统。

3.安装 Certbot 客户端

yum install -y epel-releaseyum install -y certbot

注: 安装和执行 certbot 过程中,可能会报一些错误,这些错误主要是使用到的一些 python 库版本不匹配问题,根据错误提示更新安装相应版本的库即可。

4.申请https证书

sudo certbot certonly -d "*.qinggx.cn" -d qinggx.cn --manual --preferred-challenges dns-01 --server https://acme-v02.api.letsencrypt.org/directory

5.设置 DNS TXT 记录

腾讯云解析配置的截图

查看解析是否生效:dig -t txt _acme-challenge.app.qinggx.cn

按照提示,在自己的域名服务商那里添加或者修改 _ache-challenge 的 txt 记录,修改之后需要验证是否解析成功,验证方式详见后面,验证解析成功之后输入 Enter 键继续

6.证书申请成功

如果出现这样的提示就说明证书已经申请成功了

有时需要删除已生成的证书,重新生成。可使用如下命令进行删除:

ertbot delete --cert-name sub.domain.com

7.配置 web server

证书申请成功了就基本搞定了,有了证书之后就在服务器上配置一下就可以了

nginx 配置示例:

server {
  #listen 80;
  listen 443 ssl;
  ssl_certificate            /etc/letsencrypt/live/weihanli.xyz/fullchain.pem;#证书地址
  ssl_certificate_key      /etc/letsencrypt/live/weihanli.xyz/privkey.pem;#key地址
  if ($scheme = http) {
      return  301 https://$host$request_uri;
  }
  server_name weihanli.xyz;
}

更多:

server {
 listen    443 ssl;
 server_name  xxx.abc.com;
 ssl on; // 该配置项需要去掉
 ssl_certificate   cert/server.crt;
 ssl_certificate_key cert/server.key;
 /*
  设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。
 */
 ssl_session_cache  shared:SSL:1m;
 // 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
 ssl_session_timeout 5m;
 
 /*
  选择加密套件,不同的浏览器所支持的套件(和顺序)可能会不同。
  这里指定的是OpenSSL库能够识别的写法,你可以通过 openssl -v cipher 'RC4:HIGH:!aNULL:!MD5'(后面是你所指定的套件加密算法) 来看所支持算法。
 */
 ssl_ciphers HIGH:!aNULL:!MD5;
 
 // 设置协商加密算法时,优先使用我们服务端的加密套件,而不是客户端浏览器的加密套件。
 ssl_prefer_server_ciphers on;
 
 location / {
  proxy_pass http://localhost:3001;
 }
}

重新加载 web 服务器配置或者重新重启web服务器以加载新证书,这里以重新加载 nginx 配置为例

8.配置 tomcat

配置 tomcat 支持 https,有两处需要修改:

  • 在 Connector 节点增加 proxyPort="443"

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" proxyPort="443" />

添加如下 Value 节点

<Valve className="org.apache.catalina.valves.RemoteIpValve"
remoteIpHeader="x-forwarded-for"
remoteIpProxiesHeader="x-forwarded-by"
protocolHeader="x-forwarded-proto" />

9.测试

启动 nginx 或重新载入配置,使用浏览器打开 https://app.qinggx.cn/

service nginx reload

可以使用在线工具 https://www.ssllabs.com/ssltest 来检测证书情况。

10.自动更新证书

Let’s Encrypt 证书只有 90 天有效期,我们需要在证书到期之前更新证书,certbot 提供了相应的命令 certbot renew。

/usr/bin/certbot renew --dry-run

可以将此更新命令添加到计划任务中,certbot renew 命令只会更新还有 30 天才会到期的证书,所以我们可以每隔 2 个月在凌晨3:30执行一次更新操作即可,创建一个新文件 certbot-auto-renew-cron,写入 cron 计划内容:

30 3 * */2 * /usr/bin/certbot renew --post-hook "service nginx restart" --quiet >> /var/log/cerbot.log

--pre-hook 这个参数表示执行更新操作之前要做的事情

犀利士

--post-hook 这个参数表示执行更新操作完成后要做的事情

启动 crontab 定时任务

crontab certbot-auto-renew-cron