用Let's Encrypt实现Https(Windows环境+Tomcat+Java)
补充1:
已解决20的部分问题,移步这里
单域名下多子域名同时认证HTTPS
补充2:
之前忘了说了,我这个方法只对Tomcat7.0以上有用(要不然就是8.0...)
我自己用的是9.0
原因好像是因为7.0(还是8.0)才新增的对证书配置方法的支持,也就是这里:

7.0以下这一步应该是过不去的
----------------------正文----------------------------
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/*"形式访问的处理
因为Let's Encrypt要验证你的域名是否属于你,会在你刚刚解压缩文件夹下生成一个验证文件,这里*是生成是随机字符
就比如:

这是我服务器上解压路径(我给放到桌面了),验证时候(第七,第八步)会生成一个要验证域名的文件夹,里面存放着验证文件,如下图:

SpringMVC形式验证的代码如下,其他方式自行实现:
@RequestMapping("/.well-known/acme-challenge/*")
public ResponseEntity<String> check(HttpServletRequest request, HttpServletResponse response){
HttpHeaders responseHeaders = new HttpHeaders();
responseHeaders.set("Content-Type", "application/json;charset=UTF-8");
String result="";
try {
String URI=request.getRequestURI().replace("/","\\");
//文件路径自行替换一下就行,就是上图中生成验证文件的路径,因为URI中已经包含了/.well-known/acme-challenge/,所以这里不需要
File file=new File("C:\\Users\\Administrator\\Desktop\\letsencrypt-win-simple.V1.9.1\\www.gutongxue.com\\"+URI);
InputStream is = new FileInputStream(file);
// 设置response参数,可以打开下载页面
response.reset();
response.setContentType("application/vnd.ms-excel;charset=utf-8");
response.setHeader("Content-Disposition", "attachment;filename="+ new String(("验证文件").getBytes(), "iso-8859-1"));
ServletOutputStream out = response.getOutputStream();
BufferedInputStream bis = null;
BufferedOutputStream bos = null;
try {
bis = new BufferedInputStream(is);
bos = new BufferedOutputStream(out);
byte[] buff = new byte[2048];
int bytesRead;
// Simple read/write loop.
while (-1 != (bytesRead = bis.read(buff, 0, buff.length))) {
bos.write(buff, 0, bytesRead);
}
} catch (final IOException e) {
throw e;
} finally {
if (bis != null)
bis.close();
if (bos != null)
bos.close();
}
}catch (Exception e){
}
return new ResponseEntity<String>(result, responseHeaders, HttpStatus.OK);
}
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\ ,主要使用下图三个文件:

15,装ARP环境(没有这一步Tomcat启不起来(未验证))
http://tomcat.apache.org/download-native.cgi
下载这个

解压缩,把服务器对应位数(32/64位)的tcnative-1.dll粘贴至C:\Program Files\Java\jre1.8.0_112\bin路径下

注:32位的就在压缩包的bin目录下
16,配置Tomcat(注:我也是第一次做,一头雾水不明白原理,以下配置我这里可以成功,至于说为什么这么做/你们不成功的原因,我也不知道...以后知道了再补充)
17,修改tomcat的conf目录下server.xml文件:
搜索8443端口,第二个,去掉注释,并改为这样:

<Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\www.gutongxue.com-key.pem"
certificateFile="C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\www.gutongxue.com-crt.pem"
certificateChainFile="C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\www.gutongxue.com-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
这里就用到了之前证书生成的文件,对应着填就行
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
修改为:
<Connector port="80" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443" />
<!--
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="8443" />
-->
去掉注释并修改为:
<Connector port="8009" enableLookups="false" protocol="AJP/1.3" redirectPort="443" />
18,修改tomcat的conf目录下web.xml文件:

如图位置,加入以下代码:
<security-constraint>
<web-resource-collection >
<web-resource-name >SSL</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection> <user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
19,重启Tomcat,完成

20,已知问题:
多域名同一台服务器怎么弄?Tomcat那里怎么配?还需要多试试
子域名访问时变成这个样子...很尴尬啊...

用Let's Encrypt实现Https(Windows环境+Tomcat+Java)的更多相关文章
- jmc远程连接windows环境tomcat
新人报道,先发个小贴赚点人气,本人目前还是小菜鸟,想要飞却怎么也飞不高,哈哈,转到正题,最近发现这个JMC挺好用的,而且也不用像Jprofile需要破解,本地连接挺方便的, 但配置服务器确实挺坑的,按 ...
- Windows 环境下Java调用CRF++详解
1.步骤一览 2.步骤详情 2.1.环境准备 Swig(Simplified Wrapper and Interface Generator)下载,Windows操作系统直接解压即可使用 CRF++( ...
- Windows环境Tomcat开启APR并配置http/2.0访问
1.http/2.0需要开启https 参考:https://www.cnblogs.com/zhi-leaf/p/11978615.html 2.下载tcnative-1.dll文件 官网下载地址: ...
- [从零开始搭网站六]为域名申请免费SSL证书(https),并为Tomcat配置https域名所用的多SSL证书
点击下面连接查看从零开始搭网站全系列 从零开始搭网站 由于国内的网络环境比较恶劣,运营商流量劫持的情况比较严重,一般表现为别人打开你的网站的时候会弹一些莫名其妙的广告...更过分的会跳转至别的网站. ...
- windows和linux环境下java调用C++代码-JNI技术
最近部门做安卓移动开发的需要调C++的代码,困难重重,最后任务交给了我,查找相关资料,没有一个教程能把不同环境(windows,linux)下怎么调用说明白的,自己在实现的过程中踩了几个坑,在这里总结 ...
- Windows环境中,通过Charles工具,抓取安卓手机、苹果手机中APP应用的http、https请求包信息
Windows环境中,通过Charles工具,抓取安卓手机.苹果手机中APP应用的http.https请求包信息1.抓取安卓手机中APP应用的http请求包信息1)在电脑上操作,查看Windows机器 ...
- Windows环境搭建Red5流媒体服务器指南
Windows环境搭建Red5流媒体服务器指南 测试环境:Windows 7 一. 下载安装程序 red5-server 下载地址 https://github.com/Red5/red5-ser ...
- Redis在windows环境下ThinkPHP的安装和使用
1.Redis概述: 2.Redis在windows环境下的安装: 下载地址:https://github.com/dmajkic/redis/downloads,选取其中一个zip压缩包:
- 【经验之谈】Git使用之Windows环境下配置
前言 安装 配置 关于git使用的几个问题 后记 关于代码托管,以前用过vss和svn,看博客或论坛的时候,经常有人提到github,有很多著名的开源软件都托管在github,想来肯定不错(莫笑),当 ...
随机推荐
- 转:【专题七】UDP编程补充——UDP广播程序的实现
上次因为时间的关系,所以把上一个专题遗留下的一个问题在本专题中和大家分享下,本专题主要介绍下如何实现UDP广播的程序,下面就直接介绍实现过程和代码以及运行的结果. 一.程序实现 UDP广播程序的实现代 ...
- js数组内数字按大小排序实现函数
正常冒泡排序: function evlabc(a) { //排序大小 var i = j = t = 0; for (i = 0; i < a.length; i++) { for (j = ...
- cms STW 的两个阶段
CMS在初始标记和重复标记阶段会停顿
- 第一节 JavaScript概述
第一节 JavaScript概述 JavaScript:其实就是对HTML+CSS静态页面进行样式修改,使其实现各种动态效果. 编写JS脚本基本步骤: 1. HTML+CSS静态布局: 2. 确定要修 ...
- Oracle与MySQL区别
MyBatis中模糊查询,mysql可以用concat,而oracle用"||"; 另外,mysql支持主键自增,而oracle不支持主键自增.
- Python cv2 OpenCV 中传统图片格式与 base64 转换
Base64是网络上最常见的用于传输8Bit字节码的编码方式之一,是一种基于64个可打印字符来表示二进制数据的方法.通过http传输图片常常将图片数据转换成base64之后再进行传输. Base64简 ...
- PHP 图片缩放类
<?php /** * 图片压缩类:通过缩放来压缩. * 如果要保持源图比例,把参数$percent保持为1即可. * 即使原比例压缩,也可大幅度缩小.数码相机4M图片.也可以缩为700KB左右 ...
- c++ kafka 客户端rdkafka报Receive failed: Disconnected问题原因以及解决方法
%3|1538976114.812|FAIL|rdkafka#producer-1| [thrd:kafka-server:9092/bootstrap]: kafka-server:9092/0: ...
- rabbitmq集群故障恢复详解
RabbitMQ的mirror queue(镜像队列)机制是最简单的队列HA方案,它通过在cluster的基础上增加ha-mode.ha-param等policy选项,可以根据 需求将cluster中 ...
- tls 双向认证 client端代码例子
example: python import httplib import json import ssl import urllib2 import requests CA_FILE = " ...