tomcat配置https(自制证书)

  • Post author:
  • Post category:其他




tomcat配置https(自制证书)



场景描述

业务需求采用https方式连接,但是旧有的服务需要保存http,运维(me)负责修改tomcat 这部分。



一、环境准备

需要具备以下环境:

  • openssl
  • java jdk
  • tomcat



二、SSL证书简介

要想使用https,首先,我们需要有SSL证书,证书可以通过两个渠道获得:

  • ssl证书网站

    例如CA,但是申请一般是收费的,一般几百到几千一年,一般用来绑定域名。
  • 自己生成

    虽然安全性不是那么高,但胜在成本低。

    目前证书有以下常用文件格式:JKS(.keystore),微软(.pfx),PEM(.key + .crt)。其中,tomcat使用JKS格式,nginx等使用PEM格式.



三、JKS格式证书生成

Java使用keytool生成并导出证书

  1. 打开你的终端命令行输入:
keytool -genkey -alias 证书别名 -keyalg 密钥算法 -keystore 证书库的位置和名称 -keysize 密钥长度 -validity 证书有效期(天数)
  • alias: 别名 这里起名 testKey
  • keyalg: 证书算法,RSA
  • validity:证书有效时间,10年
  • keystore:证书生成的目标路径和文件名,替换成你自己的路径即可
  1. 根据输出信息输入,其中秘钥库口令和秘要口令最好输入同一个,并且记下这个口令,其他的随便填即可。
  2. 在你刚才的目标路径里拿到生成好的test.keystore.



四、tomcat配置https

  1. 把keystore证书上传到你的tomcat服务器上(如果你的tomcat在本地,那么不移动也可以),并记下证书所在路径.
  2. 进入到tomcat的conf目录下,打开server.xml文件,搜索https找到类似下面这项,根据你的需求修改配置文件:
	<Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
            maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
            keystoreFile="conf/keys/tomcat.keystore"   keystorePass="cyberpecker"
            clientAuth="false"
            sslProtocol="TLS">
   </Connector>
  1. 先去掉注释,然后将keystoreFile和keystorePass处替换成你自己的证书路径和生成证书时的口令
  • port: https的端口,默认8443
  • clientAuth:设置是否双向验证,默认为false,设置为true代表双向验证keystoreFile
  • keystoreFile: keystore证书的路径
  • keystorePass: 生成keystore时的口令
  1. 启动tomcat,然后就可以使用https和8443端口访问你的服务了!



扩展:使用openssl自制CA证书(服务器)



相关概念

公钥及私钥:
公钥和私钥就是俗称的不对称加密方式。公钥(Public Key)与私钥(Private Key)是通过一种算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,私钥则是非公开的部分。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。
通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,则必须用另一个密钥才能解密。比如用公钥加密的数据就必须用私钥才能解密,如果用私钥进行加密也必须用公钥才能解密,否则将无法成功解密。

SSL证书:
证书一般会用到三类文件,key,csr,crt
· Key是私用密钥openssl格,通常是rsa算法。
· Csr是证书请求文件,用于申请证书。在制作csr文件的时,必须使用自己的私钥来签署申,还可以设定一个密钥。
· crt是CA认证后的证书文,(windows下面的,其实是crt),签署人用自己的key给你签署的凭证。 
备注:PEM(.key + .crt)
SSL证书采用公钥体制,即利用一对互相匹配的密钥对进行数据加密和解密。每个用户自己设定一把特定的、仅为本人所知的私有密钥(私钥),并用它进行解密和签名;同时设定一把公共密钥(公钥)并由本人公开,为一组用户所共享,用于加密和验证签名。
由于密钥仅为本人所有,可以产生其他人无法生成的加密文件,也就是形成了数字签名。
SSL证书是一个经证书授权中心(CA)数字签名的、包含公开密钥拥有者信息以及公开密钥的文件。最简单的证书包含一个公开密钥、名称以及证书授权中心的数字签名。数字证书还有一个重要的特征就是只在特定的时间段内有效。
  1. 创建根证书密钥文件(自己做CA) .key
openssl genrsa -des3 -out eagle.key 2048
\\根据提示输入两次密码,即可生成秘钥文件
  1. 创建根证书的申请文件 .csr
openssl req -new -key eagle.key -out eagle.csr
\\默认输入回车即可
  1. 创建一个自当前日期起为期十年的根证书 .crt
openssl x509 -req -days 3650 -sha256 -extensions v3_ca -signkey eagle.key -in eagle.csr -out eagle.crt
\\输入验证密码,建议和上述一致
  1. 导出.p12文件 server.p12
openssl pkcs12 -export -in eagle.crt -inkey eagle.key -out  eagle.p12 -name "server"
  1. 根据CA证书生成truststore JKS文件 root.truststore
keytool -keystore tomcat.keystore -keypass cyberpecker -storepass cyberpecker -alias eagle -import -trustcacerts -file eagle.crt

键入回车后,提示是否信息此证书,输入y, 则生成truststore成功



版权声明:本文为lovepiggirl原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。