参考:

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的更多相关文章

  1. 超详细网站博客域名和二级域名、子域名升级HTTPS免费申请SSL证书配置nginx指南

    随着互联网的飞速发展,我们的工作生活已经离不开互联网,HTTP虽然使用极为广泛, 但是存在不小的安全缺陷, 主要是其数据的明文传送和消息完整性检测的缺乏, 而这两点恰好是网络支付,网络交易等网站应用中 ...

  2. Nginx 核心配置-单节点实现多域名访问

    Nginx 核心配置-单节点实现多域名访问 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.试验环境说明 1>.虚拟机环境说明 [root@node101.yinzheng ...

  3. [转载] 浏览器Browser对同域名下的请求并发数量

    原文链接:https://blog.csdn.net/a562550212/article/details/79552713 另附原文作者贴的一个知乎地址,几个答主讲的非常好  https://www ...

  4. [原创] IIS7下顶级域名301跳转到WWW域名

    百度搜索了众多方法,居然没有一个全面的IIS7下301域名跳转能用的教程,最终自己研究出了个可以用的供大家参考.1.绑定域名01ruodian.cn www.01ruodian.cn到空间: 2.在I ...

  5. 教你wamp下多域名如何配置

    wamp下多域名配置问题 1.找到wamp安装目录的apache安装目录 找到 httpd.conf文件 例如我安装的目录为 E:\wamp\bin\apache\apache2.2.8\conf\h ...

  6. 微信小程序合法域名配置-不校验合法域名、web-view(业务域名)、TLS 版本以及 HTTPS 证书

    微信小程序合法域名配置-不校验合法域名.web-view(业务域名).TLS 版本以及 HTTPS 证书 很多教程说按照以上方式调用即可.但是当我们在程序中实际调用以上程序时,就会报错, http:/ ...

  7. Linux下解析域名命令-dig 命令使用详解

    Linux下解析域名除了使用nslookup之外,开可以使用dig命令来解析域名,dig命令可以得到更多的域名信息.dig 命令主要用来从 DNS 域名服务器查询主机地址信息.dig的全称是 (dom ...

  8. nginx 同一域名下分目录配置显示php,html,资源文件

    安装上nginx后 注意后nginx.conf 中的这么几行 error_log /var/log/nginx/error.log;  日志,这个很有用 include /etc/nginx/conf ...

  9. nginx配置允许指定域名下所有二级域名跨域请求

    核心原理是根据请求域名匹配是否是某域名的二级域名判断是否添加允许跨越头. #畅游www server { listen 8015; server_name test-tl.changyou.com; ...

随机推荐

  1. java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况

    java springboot activemq 邮件短信微服务,解决国际化服务的国内外兼容性问题,含各服务商调研情况 邮件短信微服务 spring boot 微服务 接收json格式参数 验证参数合 ...

  2. python requests接口测试

    Python 标准库中的 urllib2 模块提供了你所需要的大多数 HTTP 功能,但是它的 API 太渣了.它是为另一个时代.另一个互联网所创建的.它需要巨量的工作,甚至包括各种方法覆盖,来完成最 ...

  3. Spring P命名空间 02

    P命名空间 装配属性 使用<property> 元素为Bean 的属性装配值和引用并不太复杂.尽管如此,Spring 的命名空间p 提供了另一种Bean 属性的装配方式,该方式不需要配置如 ...

  4. Q_DECL_OVERRIDE

    Q_DECL_OVERRIDE也就是c++的override # define Q_DECL_OVERRIDE override 在重写虚函数时会用到, 作用是防止写错虚函数: void keyPre ...

  5. JavaScript笔记 #07# 用js写算法

    算法盒子初代(为了提高学习算法的热情...) 效果图: 所有代码放在单个html中: <!DOCTYPE html> <html> <head> <meta ...

  6. mycat高可用集群搭建

    本文来源于:https://blog.csdn.net/u012758088/article/details/78741567 Mycat 本身是无状态的,可以用 HAProxy 或四层交换机等设备组 ...

  7. python的ws库功能,实时获取服务器ws协议返回的数据

    # -*- coding:utf-8 -*- ''' 模块下载,帮助地址:https://github.com/liris/websocket-client#readme 模块:websocket-c ...

  8. 微信h5支付“网站域名ICP备案主体与商户号主体不一致”的解决方法,H5微信支付 授权函下载

    如下图所示: 微信h5支付“网站域名ICP备案主体与商户号主体不一致”: 需提交H5微信支付 授权函 下载地址:https://download.csdn.net/download/a72400815 ...

  9. Storm学习笔记1:Storm基本组件

    Storm概念及组件 Nimbus:负责资源分配和任务调度. Supervisor:负责接受nimbus分配的任务,启动和停止属于自己管理的worker进程. Worker:运行具体处理组件逻辑的进程 ...

  10. SaaS公司融资的「22条军规 」(转)

    编者按:本文是SaaS教父Jason Lemkin的一篇分享.他在文章中分享了他不投资一家公司的22条理由,希望对打算融资和正在融资的你有所启发. 为何有的早期创业公司能成功融资,而有的公司融资却屡遭 ...