Nginx + Tomcat 使用Let's Encrypt 搭建HTTPS

最近把公司的微信公众号,从HTTP升级到了HTTPS,过程还是非常坎坷的,参考了不少的文章,也踩过很多坑,所以这里想和大家分享一下。

如果有同学也是使用Nginx +Tomcat,或许这篇文章可以会帮上你大忙哦。

刚开始使用Openssl制作证书,但是制作证书完成后发现不受信任,就像下面这样:

Openssl制作证书可以参考下面两篇文章:

https://segmentfault.com/a/1190000004976222(Linux)

http://www.cnblogs.com/vincent-li666/p/5851463.html(Windows)

如果要消除这种状况,就必须向CA申请,这个一般是要收费的。还好,有免费的CA,也就是我们今天的主角,Let's Encrypt.

Linux:

1. 下载 certbot

1. $ git clone https://github.com/certbot/certbot

2. $ cd certbot

3. $ ./certbot-auto --help

2. 生成免费证书

./certbot-auto certonly --webroot --agree-tos -v -t --email 邮箱地址 -w 网站根目录 -d 网站域名
./certbot-auto certonly --webroot --agree-tos -v -t --email keeliizhou@gmail.com -w /path/to/your/web/root -d note.crazy4code.com

注意这里 默认会自动生成 /网站根目录/.well-known/acme-challenge,然后 shell 脚本会对应的访问 网站域名/.well-known/acme-challenge

如果返回正常就确认了你对这个网站的所有权,就能顺利生成

3. 获取证书

如果上面的步骤正常 shell 脚本会展示如下信息:

- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/网站域名/fullchain.pem

4. 生成 dhparams

使用 openssl 工具生成dhparams

openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

5. 配置 Nginx

打开 nginx server 配置文件加入如下设置:

listen       443 ssl;
ssl_certificate/etc/letsencrypt/live/网站域名/fullchain.pem;
ssl_certificate_key/etc/letsencrypt/live/网站域名/privkey.pem;
ssl_dhparam/etc/ssl/certs/dhparams.pem;
ssl_protocolsSSLv3TLSv1TLSv1.1TLSv1.2;
ssl_ciphersHIGH:!aNULL:!MD5;
location / {
    proxy_pass **Tomcat Server**         
}

然后重启 nginx 服务就可以了

参考:

https://zhuanlan.zhihu.com/p/21286171

http://mp.weixin.qq.com/s/vxRpZU6DNoewrQZLDW7YDA (通配符证书,一键子域名开启 HTTPS)


Windows:

1. 下载Let's Encrypt Windows认证客户端

http://files.cnblogs.com/files/teamblog/letsencrypt-win-simple.V1.9.1.zip

2. 解压缩,打开letsencrypt.exe

3. 设置提醒邮箱

4. Y同意条

5. M方式认

6. 在你想要上https的域名的后台文件里,加入对"/.well-known/acme-challenge/*"形式访问的处理

7.  输入你想转为https的域名

8. 验证文件的域名(如果用我的代码,就还输入你的域名就行,验证原理是访问你输入的值+/.well-known/acme-challenge/+生成的随机码)

9. 证书到这里就生成成功

10. 由于Let's Encrypt是免费的SSL证书,90天就过期了,需要再次认证,贴心的Let's Encrypt客户端程序会自动帮你生成验证脚本,不要关闭窗口,继续往下走就行

11. 确认帮你创建定时任务(不确定的话90天后SSL证书过期,就不是https)

12. 输入该计算机(服务器)的管理员帐号密

13. 证书部分完成,可以关闭该窗口

14. 找到生成的证书文件,默认路径在 C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\主要使用如下两个文件:

XXX-chain.pem

XXX-key.pem

15. 配置Nginx:

server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate      XXX-chain.pem;
        ssl_certificate_key  XXX-key.pem;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
                proxy_pass **Tomcat Server**         
        }
}

重启Nginx,大功告

参考:

https://www.cnblogs.com/blog5277/p/6375473.html

https://www.cnblogs.com/teamblog/p/6219204.html

Nginx(HTTPS) + Tomcat(HTTP)

是不是很开心?但是到这里还没有完,我们搭建的是Nginx +Tomcat

如果Nginx变成了https,而Tomcat依然使用http的话,你仍然无法正常访问,会出现:

Provisional headers are shown

不过也很简单,只需要修改一下Tomcat的server.xml文件就可以,修改connection如下:

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

参考:

https://www.oschina.net/question/12_213459

至此,全部搞定!







  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值