单域名下多子域名同时认证HTTPS
参考:
http://blog.csdn.net/wzj0808/article/details/53401101
http://www.cnblogs.com/silin6/p/5931640.html
前言:
在完成了上一篇博文之后
用Let's Encrypt实现Https(Windows环境+Tomcat+Java)
遇到了新问题,那就是一个Tomcat下配置了多个网站,结果由于在tomcat里配置了默认使用SSL认证,导致存放在同一tomcat里的项目,都要使用https,然而那些没有https证书的项目就很尴尬了,比如:
在手机上访问就更尴尬了,会蹦出来安全提示弹框,说该网站证书不安全,是否继续访问,点继续才能访问.
所以,配置多域名证书势在必行
说个题外话:
(貌似)Tomcat下(一个IP)只能配置一个CA证书,多个的话会让前面的失效
所以,那就得多个域名签一个证书.
注意:这里的多个域名,我这里使用的是同一host的,多个子域名,没试过不同host的情况
下面开始正题
与前一篇博文略有不同,主要是前9步,后续相同这里就不再说了
1,用CMD进入命令窗口,跳转至letsencrypt客户端解压缩后的文件,输入letsencrypt.exe --san
2,接下来就是邮箱认证什么的,由于我之前认证过了,这里被跳过了,没法截图
3,这一步,按M
4,输入host名
注意:比如你要配置
a.xyz.com
b.xyz.com
那么这里就输入xyz.com,是不带子域名的
5,输入全部你想认证的子域名,用英文逗号隔开
6,**重点**
这里要的是将来存放验证的路径,这个认证会依次顺序访问第五步填写的子域名,然后请求一个路径(/.well-known/acme-challenge/+生成的随机码),验证通过了就下发证书
这里的路径存放所有要验证的网址的配置文件,与单域名不同
我就存放在letsencrypt目录下
7,认证域名
单域名可以指定认证网址,比如:www.gutongxue.com/check/.well-known/acme-challenge/+生成的随机码
但是多域名认证的话,必须为根目录,就比如
www.gutongxue.com/.well-known/acme-challenge/+生成的随机码
student.gutongxue.com/.well-known/acme-challenge/+生成的随机码
所以写验证文件的时候就要做好准备了,另外文件存放的路径也不对了,所以我对验证的方法稍作修改,贴在下面了:
这个是SpringMVC的Java代码,其他的如有敬请自行编写,我并不会
@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();
URI=URI.split("/")[URI.split("/").length-1];
//文件路径填写你们上一步指定的路径+\.well-known\acme-challenge\
File file=new File("C:\\Users\\Administrator\\Desktop\\letsencrypt-win-simple.V1.9.1\\.well-known\\acme-challenge\\"+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);
}
记住,生成文件的路径是在这里:
每个域名对应的项目都要放这么一段代码,一模一样的就行,然后,没完
8,因为你看到了,认证文件的路径开头是.开头的(.well-known),有的时候可能认证程序不认识,没法通过,所以要写个文件mimeMap.xml,放在该项目的根目录下(个人建议是每个项目都放,就1kb而已),根目录在JavaWeb项目里就是这:
内容是:
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<system.webServer>
<staticContent>
<mimeMap fileExtension="." mimeType="text/plain" />
</staticContent>
</system.webServer>
</configuration>
9,回到命令行,回车认证
10,与之前的博文第十步一样,后面也都一样,这里就不再放了
后记:
目前还没有单Tomcat配多host的需求
以后有需求我再研究,如果你们遇到了这个情况,请搜索:
tomcat 实现多域名多IP多SSL证书
原理是在指定CA证书的时候,多添一个属性address,多配一个IP
但我觉得应该还有一个CA证书配置多个host的办法吧,先放一放,以后需要了再研究吧
单域名下多子域名同时认证HTTPS的更多相关文章
- 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南
随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...
- Nginx 核心配置-单节点实现多域名访问
Nginx 核心配置-单节点实现多域名访问 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.试验环境说明 1>.虚拟机环境说明 [root@node101.yinzheng ...
- [转载] 浏览器Browser对同域名下的请求并发数量
原文链接:https://blog.csdn.net/a562550212/article/details/79552713 另附原文作者贴的一个知乎地址,几个答主讲的非常好 https://www ...
- [原创] IIS7下顶级域名301跳转到WWW域名
百度搜索了众多方法,居然没有一个全面的IIS7下301域名跳转能用的教程,最终自己研究出了个可以用的供大家参考.1.绑定域名01ruodian.cn www.01ruodian.cn到空间: 2.在I ...
- 教你wamp下多域名如何配置
wamp下多域名配置问题 1.找到wamp安装目录的apache安装目录 找到 httpd.conf文件 例如我安装的目录为 E:\wamp\bin\apache\apache2.2.8\conf\h ...
- 微信小程序合法域名配置-不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书
微信小程序合法域名配置-不校验合法域名.web-view(业务域名).TLS 版本以及 HTTPS 证书 很多教程说按照以上方式调用即可.但是当我们在程序中实际调用以上程序时,就会报错, http:/ ...
- Linux下解析域名命令-dig 命令使用详解
Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地址信息.dig的全称是 (dom ...
- nginx 同一域名下分目录配置显示php,html,资源文件
安装上nginx后 注意后nginx.conf 中的这么几行 error_log /var/log/nginx/error.log; 日志,这个很有用 include /etc/nginx/conf ...
- nginx配置允许指定域名下所有二级域名跨域请求
核心原理是根据请求域名匹配是否是某域名的二级域名判断是否添加允许跨越头. #畅游www server { listen 8015; server_name test-tl.changyou.com; ...
随机推荐
- 20165316 2017-2018-2《Java程序设计》课程总结
20165316 2017-2018-2<Java程序设计>课程总结 一.每周作业链接汇总 1. 预备作业一:我期望的师生关系 20165316 我期望的师生关系 摘要: 典型老师 师生关 ...
- Maven依赖中的scope详解,在eclipse里面用maven install可以编程成功,到服务器上用命令执行报VM crash错误
Maven依赖中的scope详解 项目中用了<scope>test</scope>在eclipse里面用maven install可以编译成功,到服务器上用命令执行报VM cr ...
- 谷歌重磅开源强化学习框架Dopamine吊打OpenAI
谷歌重磅开源强化学习框架Dopamine吊打OpenAI 近日OpenAI在Dota 2上的表现,让强化学习又火了一把,但是 OpenAI 的强化学习训练环境 OpenAI Gym 却屡遭抱怨,比如不 ...
- tomcat9 性能调优
官网最靠谱 tomcat 参数官网: http://tomcat.apache.org/tomcat-7.0-doc/config/http.html <Connector port=& ...
- JustOJ1500: 蛇行矩阵
题目链接:https://oj.ismdeep.com/problem?id=1500 题目描述 蛇形矩阵是由1开始的自然数依次排列成的一个矩阵上三角形. 输入 本题有多组数据,每组数据由一个正整数N ...
- 实用的 图片上传 html+css
html <form id="mainForm"> <div class="content"> <div class=" ...
- Python进阶【第九篇】装饰器
什么是装饰器 装饰器本身就是函数,并且为其他函数添加附加功能 装饰器的原则:1.不修改被装饰对象的源代码 2.不修改被装饰对象的调用方式装饰器=高阶函数+函数嵌套+闭包 # res=timmer(t ...
- org.springframework.beans.factory.BeanCreationException,Invocation of init method failed,Context initialization failed
G:\javaanzhuang\apache-tomcat-\bin\catalina.bat run [-- ::,] Artifact ssm_qingmu02_web:war exploded: ...
- kivy中bind的使用
一般在kivy中使用bind()来绑定回调函数,所谓回调函数,个人理解就是一个预先定义好的方法, 因为APP是静态的, 需要等待用户进行操作, 特定的操作背后都绑定了特定的回调函数, 一般有两种类型: ...
- PXC备份方式总结
记录一下. 1.mysqldump数据导出 关于GTID: GTID是MySQL5.6以后,加入了全局事务 ID (GTID) 来强化数据库的主备一致性,故障恢复,以及容错能力. A global t ...