Tomcat 配置SSL/TLS(https)

我的未来我决定 提交于 2020-01-11 02:15:11

1.什么是SSL/TLS

 

TLS:Transport Layer Security 安全传输层

SSL:Secure Sockets Layer 安全接口层

SSL/TLS协议确保安全的访问web页面,它是如何做到的呢?

     1.当配置了SSL/TLS后,数据在传输前将被加密,传输方在传输数据时进行加密,接收方接受数据时解密,这意味着服务器和客户端在传输数据时都会进行加密与解密操作,所以在中间截断者(抓包)即使获取到了传输内容也无法看到其内容。

     2.当客户端第一次请求网页内容时会弹出一个是否添加到信任网站的页面,当你选择将该页面添加为信任页面后并继续请求访问时,服务器会请求询问该客户端是否确认授权,如果授权则允许访问。

     3.SSL/TLS协议常被应用于B2B(business-to-business)

     4.大多数SSL网站无需手动授权,因为这些网站经过了有公信的第三方证书授权,而这些授权信息已经添加到浏览器中了

 

2.SSL/TLS与Tomcat

     当在tomcat服务器跑一个项目时(javaweb),配合SSL是十分有必要的。通常来说,当配置了SSL后,当服务器接只有对收到请求的进行解密操作才能看到请求内容,如果无法解密,将会返回一个错误的请求给客户端。

      tomcat支持大部分加密协议和加密算法,Java语言自带加密能力(tomcat用java语言编写),通过JCE/JCA进行加密操作,通过JSSE对加密后的传输文件进行封装。 支持的SSL/TLS的版本有 SSLv3, TLSv1, TLSv1.1。

 

3.OpenSSL与Tomcat

    如果你不想用JCE/JCA/JSSE进行加密,你可以使用openSSL生成的秘钥和证书,openSSL可以提供不同的加密算法以和性能优势。

 

4.证书文件

    为了使用SSL协议,你必须获取一张SSl证书(数字证书),这张证书可以是你在网上买的,有权威的第三方认证,也可以是你自己生成的,如果是你自己生成的,对于客户端来说你的网站就是无信任度的,所以最好是购买一张有公信度的SSL证书,一年大概2000RMB。

    有些第三方授权是默认加载到你的信任列表中的,打开你的浏览器,设置-高级-证书设置,可以看到一些有公信的颁发者

 

              

   Java提供了证书生成命令工具,叫做keytool,keytool可以创建私人证书,私人证书是非授权的,所以其他人在访问你的页面时会有安全报警提示。

 

5.生成秘钥和证书

    tomcat的秘钥目前只支持JSK,PKCS11或者PKCS12。JKS是Java标准化的秘钥格式,可以由JDK下的keystool脚本生成。PKCS12是互联网标准化的密码,可以由OpenSSL和微软的秘钥管理器生成。

     每一个keystore(秘钥)都被一个别名标记,用于区分不同的秘钥。

 

创建一个JKS的秘钥和一个私人证书,命令如下:

$JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA -keystore /path/to/my/keystore

$JAVA_HOME是jdk的家目录,找到这个路径的方式如下,可以看到在文件目录下有一个keytool的脚本,-keystore参数指定keysotre的存放在哪。

     执行此命令后,将首先提示您输入密钥库密码。Tomcat使用的默认密码是“changeit”(全小写),不过如果愿意,可以指定自定义密码。您还需要在server.xml配置文件中指定自定义密码。

    接下来,将提示您输入有关此证书的一般信息,如公司、联系人姓名等。此信息将显示给试图访问应用程序中安全页的用户,因此请确保此处提供的信息与他们期望的相符。

     最后,系统将提示您输入密钥密码,这是专门用于此证书的密码(与存储在同一密钥库文件中的任何其他证书不同)。keytool提示符将告诉您,按ENTER键将自动为密钥使用与密钥库相同的密码。您可以自由使用相同的密码或选择自定义密码。如果选择与密钥库密码不同的密码,则还需要在server.xml配置文件中指定自定义密码。

 

如果一切操作正常,你可以看到一个叫keystone的文件

 

6.配置tomcat的配置文件server.xml

找到tomcat的配置文件server.xml,打开,找到如下所示的内容,默认是注释掉的,我们打开注释。我们要修改的是keystoreFile 即keystore文件存放的路径。还有keystorePass,之前创建秘钥证书时输入的密码。

 

<!-- Define an SSL Coyote HTTP/1.1 Connector on port 8443 -->
<Connector
           protocol="org.apache.coyote.http11.Http11NioProtocol"
           port="8443" maxThreads="200"
           scheme="https" secure="true" SSLEnabled="true"
           keystoreFile="/usr/local/tomcat/conf/keystore" keystorePass="changeit"
           clientAuth="false" sslProtocol="TLS"/>

7.测试

做完这些操作后,我们测试一下,在浏览器中输入https://localhost:8443/项目路径

可以看到如下提示,点击高级,添加到信任即可访问

 

   

 

我们现在使用的是私人证书,所以是不安全的

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!