配置 Tomcat 启用 HTTPS协议方法(免费证书)

/ 0条评论 / 0 个点赞 / 1017人阅读

首先找到 java 安装目录
我本地的安装路径为: C:\eclipse\pleiades\java\8\bin

CMD 进入 JDK 安装目录

cd C:\eclipse\pleiades\java\8\bin

使用 jdk 自带 keytool.exe 生成 ssl 证书

注:以下目录是我自己建的,在使用时修改为自己所创建的目录

1、生成服务器证书

    keytool -genkey -v -alias tomcat -keyalg RSA -keystore C:/ssl/tomcat.keystore -validity 3650


    参数说明:
    genkey生成方式,对称或者非对称
    -alias tomcat(别名)
    -keyalg RSA(算法)
    -keysize 1024(密钥长度)
    -validity 365(有效期,天单位)
    -keystore C:/keys1/tomcat.keystore(指定生成证书的位置和证书名称)

_注:以上的 keystore 密码建议设置成一致,避免混乱。这里设置测试密码为 p@ssw0rd。输入密码后,提示输入名字与姓氏,这里输入浏览器访问域名。其他项直接回车跳过即可。C:/ssl/ 目录需要提前手动创建好,否则会生成失败_

2、生成客户端证书:

keytool -genkey -v -alias clientkey -keyalg RSA -storetype PKCS12 -keystore c:/ssl/clientkey.p12 -validity 3650

3、这里服务端跟客户端生成完证书,双向需要认证。首先,让服务器信任客户端证书:

keytool -export -alias clientkey -keystore c:/ssl/clientkey.p12 -storetype PKCS12 -storepass p@ssw0rd -rfc -file c:/ssl/clientkey.cer

4、将客户端证书导入服务器证书库。(服务器信任客户端证书)

keytool -import -v -file c:/ssl/clientkey.cer -keystore c:/ssl/tomcat.keystore

5、客户端信任服务器证书:

keytool -keystore c:/ssl/tomcat.keystore -export -alias tomcat -file c:/ssl/tomcat.cer

在最后完成了窗口提示我用以下命令将证书转换为 pkcs12 加密

keytool -importkeystore -srckeystore C:/ssl/tomcat.keystore -destkeystore C:/ssl/tomcat.keystore -deststoretype pkcs12

6.双击 tomcat.cer–>安装证书–>证书存储选择“受信任的根证书颁发机构”–>后面根据提示安装即可

7、配置 tomcat 种 server.xml 中 443 端口。观察 tomcat 中端口配置:

这里有配置 redirectPort="443" 。猜测这里如果添加了 SSL/TLS 证书后,利用 http 协议 80 端口访问将自动重定向到 443 端口。所以这里修改 443 为 TLS 认证协议:

    <Connector port="80" protocol="HTTP/1.1"
               maxParameterCount="-1"
               connectionTimeout="20000"
               redirectPort="443"
			   />

   <Connector port="443"
          protocol="org.apache.coyote.http11.Http11NioProtocol"
          maxThreads="150"
          SSLEnabled="true"
		  scheme="https"
		  secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="C:\ssl\tomcat.keystore" keystorePass="p@ssw0rd"
		  truststoreFile="C:\ssl\tomcat.keystore" truststorePass="p@ssw0rd"
		  ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA"/>

参数说明:keystoreFile 证书路径。keystorePass 设置证书密码。ciphers 设置这个参数,避免 chrome 浏览器由于安全机制过滤,提示“

8、配置 tomcat 目录下的 web.xml,添加 ssl 认证,将 http 请求全部需要 ssl 认证:

<login-config>
	<!-- Authorization setting for SSL -->
	<auth-method>CLIENT-CERT</auth-method>
	<realm-name>Client Cert Users-only Area</realm-name>
	</login-config>
<security-constraint>
	<!-- Authorization setting for SSL -->
	<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>

9.配置域名

http://www.xxxxx.cn本来就是可以访问的域名,但是此例中我们用它测试证书,所以不能让他访问真实的服务器,我们应该让他访问到本机,只有这样我们安装到本地JVM的证书才有效,方法如下:

打开 C:/Windows/System32/drivers/etc/hosts,拉到最下面添加:

127.0.0.1 www.xxxxx.cn

10.启动 tomcat

所有的配置都已完成,现在就让我们来启动 tomcat 吧。
输入:https://www.xxxxx.cn,会提示你该网站的安全证书不受信任,没错,这就是为什么让你到证书提供商购买的原因。



Tomcat 配置 .pfx格式 SSL证书

1.证书来源:

  a. 阿里云或者腾讯云申请免费的证书

  b. JDK生成证书(这种方式生成的证书,用浏览器访问时会显示不受信任的证书,这个是正常情况)

  本教程使用的是阿里申请的免费证书。获得的证书文件如下

其中pfx-password.txt文件中的就是证书密码

2.环境

Windows 10, Tomcat 8, .pfx格式证书

3.Tomcat配置证书

修改Tomcat 目录下conf/server.xml文件

 找到<Connection port="8443"标签,增加如下属性:

 keystoreFile="证书文件路径(相对路径,绝对路径都可以)"

  keystoreType="PKCS12"

 keystorePass="证书密码"

完整的配置如下,其中port属性根据实际情况修改:

<Connector port="8443"
protocol="HTTP/1.1"
SSLEnabled="true"
scheme="https"
secure="true"
keystoreFile="cert/215010603480106.pfx"
keystoreType="PKCS12"
keystorePass="证书密码"
clientAuth="false"
SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"
ciphers="TLS_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA256"/>


4.保存重启Tomcat

5.访问项目https://域名:port ,这里需要注意,这个域名一定要和申请的证书一样,否则将会出现不信任的证书

如:直接输入IP访问,将会出现不信任的证书。如果在本地测试可以修改电脑的HOST文件,把域名解析到本机

6.配置所有的请求都走HTTPS,如:地址栏输入http://baidu.com自动跳转为https://baidu.com

修改Tomcat 目录下/conf/web.xml


在最后(</web-app>标签内)增加如下:

<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>

保存重启Tomcat