SSL证书可以去各个平台,如果腾讯云、阿里上面都有免费的证书,这里使用的是Java生成的【.crt】证书。
环境:win10系统
Java命令生成证书的步骤如下:
1、先创建一个 keys 文件夹,我的证书是放在 d:/Java_KaiFa/project/demo/shrio/sso/keys 里面的,位置可以随便放,只要在生成证书时的命令和配置tomcat的时候把路径配置对就可以了。
2、使用命令:
第一个命令:
keytool -genkey -alias keystore -keyalg RSA -keystore d:/Java_KaiFa/project/demo/shrio/sso/keys/keystore
第二个命令:
keytool -export -file d:/Java_KaiFa/project/demo/shrio/sso/keys/keystore.crt -alias keystore -keystore d:/Java_KaiFa/project/demo/shrio/sso/keys/keystore
生成好的ssl证书如下:
接下来就是配置tomcat 7了。
打开tomcat的conf文件夹中的server.xml文件:
添加一个配置:
<Connector
protocol="org.apache.coyote.http11.Http11NioProtocol"
port="8443" maxThreads="200"
scheme="https" secure="true" SSLEnabled="true"
keystoreFile="D:\Java_KaiFa\project\demo\shrio\sso\keys\keystore" keystorePass="123456"
clientAuth="false" sslProtocol="TLS"/>
这个配置是在文件中有的,只是被注释掉了,所以这里就不打开配置文件的注释,直接添加就好了。
keystorePass:这个是生成证书的时候输入的密码。
字段配置
属 性 | 描 述 |
---|---|
clientAuth | 如果设为true,表示Tomcat要求所有的SSL客户出示安全证书,对SSL客户进行身份验证 |
keystoreFile | 指定keystore文件的存放位置,可以指定绝对路径,也可以指定相对于<CATALINA_HOME> (Tomcat安装目录)环境变量的相对路径。如果此项没有设定,默认情况下,Tomcat将从当前操作系统用户的用户目录下读取名为 “.keystore”的文件。 |
keystorePass | 指定keystore的密码,如果此项没有设定,在默认情况下,Tomcat将使用“changeit”作为默认密码。 |
sslProtocol | 指定套接字(Socket)使用的加密/解密协议,默认值为TLS,用户不应该修改这个默认值。 |
ciphers | 指定套接字可用的用于加密的密码清单,多个密码间以逗号(,)分隔。如果此项没有设定,在默认情况下,套接字可以使用任意一个可用的密码。 |
这个时候就可以启动该tomcat了,https://localhost:8443/,输入这个网址,就可以进行 https 的访问了,原来的 http 请求还是可以访问tomcat的。
如果想要所有的请求都必须是https,那么就想要对conf文件夹下的web.xml进行配置了。
web.xml添加配置:直接将这个配置写入到<web-app></web-app>标签内就可以了。
<security-constraint>
<web-resource-collection>
<web-resource-name>securedapp</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
将 URL 映射设为 /* ,这样你的整个应用都要求是 HTTPS 访问,而 transport-guarantee 标签设置为 CONFIDENTIAL 以便使应用支持 SSL。
注意,此时你通过http也是可以访问的,但是服务器会自动的跳转到https的路径上,然后我们要清楚,http的默认端口号是80,而https的默认端口为443。
如果你希望关闭http自动跳转到https ,只需要将 CONFIDENTIAL 改为 NONE 即可。
https配置成功后访问tomcat的默认页面如下,注意网址部分: