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

     

  • 相关阅读:
    在energia中添加新的库
    KEIL3中出现的字符不对齐的情况解决办法
    VHDL硬件描述语言实现数字钟
    51单片机软件I2C驱动中的CY
    自问自答:在VB中如何实现像C++一样printf的功能
    [转][译] 分分钟学会一门语言之 Python 篇
    杂谈PID控制算法——最终篇:C语言实现51单片机中的PID算法
    Eclipse 安装与配置
    win10 环境安装 jdk 11.0.2
    解决网络问题神奇工具
  • 原文地址:https://www.cnblogs.com/blog5277/p/6378776.html
Copyright © 2020-2023  润新知