美文网首页
Centos7 + Tomcat 8 + Let's e

Centos7 + Tomcat 8 + Let's e

作者: 随风遣入夜 | 来源:发表于2018-12-22 19:45 被阅读108次

    目标 :为域名配置SSL证书,使用https开头访问域名。

    基础环境

    centos7 x64 服务器
    tomcat8 web容器
    JDK8 Java环境
    可爱的免费SSL申请网站Let's encrypt https://letsencrypt.org/

    配置顺序

    1、生成证书
    2、配置其他支持环境
    3、证书配置进tomcat

    开始

    一、获取 Let’s Encrypt 免费 SSL 证书
    1、下载代码,上传至服务器指定目录 我放在了/var/ssl/下
    生成证书需要下载letsencrypt软件支持,我直接在本地拉取github的代码,传到服务器,解压后位置为/var/ssl/letsencrypt/*

    # letsencrypt拉取地址,下面两个都是可以的
    https://github.com/certbot/certbot 或 https://github.com/letsencrypt/letsencrypt 
    

    2、用命令获取ssl证书

    # 获取证书, 选用 standalone 参数,在此需要把 tomcat 服务器关闭(否则可能会报错)
    # -d 你的域名 例如:  smartisan.com -d www.smartisan.com
    $ ./letsencrypt-auto certonly --standalone --email 你的邮箱 -d smartisan.com -d www.smartisan.com
    
    注意了!!!

    执行出问题的先看这里了,我在执行上面获取证书的代码时遇到了一些问题主要是两个
    ①首先要关闭正在运行且使用80端口的tomcat 为了保险期间 我建议你关闭所有tomcat
    ②仔细看上面的命令 [./letsencrypt-auto] 是不是感觉很熟悉啊,没错这个就是shell脚本,我这边呢下载下来的代码是位于/var/ssl/letsencrypt/letsencrypt-auto 这个letsencrypt-auto其实就是sh脚本 不用管他为什么不写后缀名,这里我下的版本有个坑,就是这个shell脚本的文件编码是win的 如果你执行上面的命令,出现
    -bash: ./letsencrypt-auto: /bin/sh^M: bad interpreter: No such file or directory
    那么请你先检查一下 这个文件的编码

    # 查看该错误文件的格式(一般报错的文件格式是DOS)
     vi letsencrypt-auto
    :set ff
    如果ff=dos 说明就是这里了 
    :set ff=unix 
    :wq
    再运行就好了
    

    如果遇到下面的情况说明你获取成功了,中间黑的地方是以自己域名命名的文件夹


    获取SSL证书成功后的信息

    这段说明里面有一个点要注意下,就是证书到期的日期,如图我的是2019年3月22日到期
    可以在你的 /etc/letsencrypt/live/域名/ 目录下看到一下几个文件


    证书全部文件
    到这一步,说明你已经准备好相关的证书了。
    二、配置其他支持环境

    这里说一下 在tomcat里面要配置ssl证书需要三个环境基础,分别是tomcat-native,apr,apr-util
    apr和apr-util建议从官网下载压缩包 版本都选最新的就行 上传到服务器 然后进行安装
    我上传到/usr/local/src下 我们用命令分别安装

    
    #  安装apr
     
    $ cd /usr/local/src
    $ wget  https://mirrors.cnnic.cn/apache/apr/apr-1.6.3.tar.gz
     
    $ tar -xzvf apr-1.6.3.tar.gz
    $ cd apr-1.6.3/
    $ ./configure --prefix=/usr/local/apr
    $ make && make install
     
     
    # 安装 apr-util
     
    $ cd /usr/local/src
    $ tar -xzvf apr-util-1.6.1.tar.gz  
    $ cd apr-util-1.6.1/
    $ ./configure --prefix=/usr/local/apr-util  --with-apr=/usr/local/apr 
    $ make && make install
     
     
    # 在 /etc/profile 文件中 添加以下两句话
    export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/apr/lib
    export LD_RUN_PATH=$LD_RUN_PATH:/usr/local/apr/lib
     
    # 使环境变量 立刻生效
    $ source /etc/profile
     
    # 安装tomcat-native    tomcat-native 默认在 tomcat/bin 目录下有,所以找到之后执行编译安装就行
     
    $ cd 到你的tomcat/bin目录下
    $ tar -xzxf  tomcat-native-1.2.17-src.tar.gz
    # 安装这里的Java-home写你自己的jdk配置路径
    ./configure --prefix=/usr/local/apr --with-java-home=./jdk1.8.0_181/
    ./configure && make && make install
    

    三、证书配置进tomcat

    注意 了 如果你使用的是tomcat9以上的版本可以直接使用上面获取到的SSL证书文件,下面分别列出两种配置

    tomcat9

    修改 安装 tomcat 目录下的 conf/server.xml 文件

    <Connector port="80" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="443" />
    
    <!--  以下这部分代码在原始文件中是 被注释掉的,取消掉注释 -->
    <Connector port="443" protocol="org.apache.coyote.http11.Http11AprProtocol"
               maxThreads="150" SSLEnabled="true" URIEncoding="UTF-8" >
        <UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
        <SSLHostConfig>
                <Certificate             
                        certificateKeyFile="/etc/letsencrypt/live/你的域名/privkey.pem"
                        certificateFile="/etc/letsencrypt/live/你的域名/cert.pem"
                        certificateChainFile="/etc/letsencrypt/live/你的域名/chain.pem"
                type="RSA" />
        </SSLHostConfig>
    </Connector>
    

    这一步中 的端口号 原始的是 8443 可以保持原端口号, 注意你的系统 将其端口打开
    打开端口的具体方式 centos6 和 centos7 的方式也不太一样,具体可以百度。
    //修改 web.xml (web.xml 和 server.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>
    
    tomcat7 or 8

    需要用到 Linux 下的 openssl 和 keytool 工具,将SSL证书由 .pem 格式转换成 Tomcat 所支持的 .jks 格式。
    这里需要设置密码 比如我设置的是qwer@12

    # 导出.p12格式的证书
    $ openssl pkcs12 -export -in fullchain.pem -inkey privkey.pem -out lsl_letsencrypt.p12 -name tomcat_letsencrypt
    
    # 再将证书由.p12格式转换成.jks格式
    $ keytool -importkeystore -srckeystore lsl_letsencrypt.p12 -srcstoretype PKCS12 -deststoretype JKS -destkeystore lsl_letsencrypt.jks
    

    经过上面的两步操作,/etc/letsencrypt/live/你的域名/ 目录下就生成了一个新的证书 lsl_letsencrypt.jks。接下来,修改 %tomcat%/conf/server.xml 文件,添加 keystoreFile 和 keystorePass 两行配置。其中,keystoreFile 指向 jks 证书文件,而 keystorePass 则为证书的密钥。修改后的关键配置如下:

    <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"
        maxThreads="150" scheme="https" secure="true"
        clientAuth="false" sslProtocol="TLS"
        keystoreFile="/etc/letsencrypt/live/你的域名/lsl_letsencrypt.jks"
        keystorePass="qwer@12"
    />
    

    好了搞到这里就OK了 反正我是OK了,哈哈,打开浏览器输入你的域名用https访问,看看是否有个小锁,这里有个问题,如果你在服务器上的话 建议将自己的端口直接设置成443,记住了 端口要打开噢 ,centos7的端口开关和以前的版本不一样,要注意,下面给个自动续期的博客,可以尝试一下。
    https://blog.csdn.net/anukram/article/details/78176614
    参考博客:
    https://blog.csdn.net/u013291612/article/details/81123663
    https://blog.csdn.net/lyq8479/article/details/79022888
    https://confluence.atlassian.com/confkb/ssl-connector-fails-to-initialize-during-tomcat-startup-646251490.html
    最后隆重感谢https://letsencrypt.org/
    谢谢开源世界

    相关文章

      网友评论

          本文标题:Centos7 + Tomcat 8 + Let's e

          本文链接:https://www.haomeiwen.com/subject/ercwkqtx.html