zoukankan      html  css  js  c++  java
  • 单域名下多子域名同时认证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-knownacme-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的办法吧,先放一放,以后需要了再研究吧

     

  • 相关阅读:
    UVA 408 (13.07.28)
    linux概念之用户,组及权限
    Java实现 蓝桥杯 历届试题 网络寻路
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 约数倍数选卡片
    Java实现 蓝桥杯 历届试题 九宫重排
    Java实现 蓝桥杯 历届试题 九宫重排
  • 原文地址:https://www.cnblogs.com/blog5277/p/6378776.html
Copyright © 2011-2022 走看看