方法一:使用JAVA自带的keytool生成证书,但是该方法生成的证书不是有效证书,不被浏览器信任,如果是被信任的站点,浏览器左侧会有个绿色的图标,但是这种方法简单,本地就可以轻松测试。
要想使用https,首先,我们需要有SSL证书,证书可以通过两个渠道获得:
- 公开可信认证机构
例如CA,但是申请一般是收费的,一般几百到几千一年. - 自己生成
虽然安全性不是那么高,但胜在成本低. - 目前证书有以下常用文件格式:JKS(.keystore),微软(.pfx),PEM(.key + .crt)。其中,tomcat使用JKS格式,Nginx使用PEM格式.这里用JKS做示例
- 生成JKS证书
- 打开命令行输入keytool -genkey -v -alias testKey -keyalg RSA -validity 3650 -keystore E:\testKey\test.keystore
- alias: 别名 这里起名testKey
keyalg: 证书算法,RSA
validity:证书有效时间,10年
keystore:证书生成的目标路径和文件名,替换成你自己的路径即可,我定义的是E:\testKey\test.keystore
回车,然后会让你输入一些信息,其中秘钥库口令和秘要口令最好输入同一个,并且记下这个口令,(配置tomcat会用到该口令)其他的可随意填 - Tomcat配置Https
- 打开tomcat下的conf目录下的server.xml文件,搜寻https即可定位到相应的组件,完整的配置如下:
- <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" keystoreFile="你的keystore路径" keystorePass="生成证书时的口令" /> - 网址输入https://127.0.0.1:8443可正常访问,但是会发现http://127.0.0.1:8080也可以正常访问但是并没有跳转到https协议,这里我们做如下配置
在web.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>然后我们访问Http端口时就会跳转到https协议端口