前提条件:已经下载并安装配置好Tomcat,访问的时候会出现tomcat的界面。
第一步:配置hosts文件
添加一行127.0.0.1 codecrazy.cn。这一步不是必要的,只是为了访问的时候效果更好(逼格更高)一点。此时就可以通过进行访问了。
第二步:生成证书
这里采用JDK自带的keytool工具来生成。
如上图所示,输入红框中的命令:
E:\Java\bin>keytool -genkey -alias tomcat -keyalg RSA -keysize 1024 -keypass changeit -validity 365 -keystore e:\sms\tomcat.keystore -storepass changeit
之后需要填写几个问题,最后一个问题填入‘y’并回车。
执行上述命令之后会在e:\sms下面生成一个tomcat.keystore文件,-keystore选项指定存储位置和文件名。如果不指定的话会默认在用户的主目录下生成一个“.keystore”文件,-storepass指定存储密码。 -keypass指定的库密码,这2个密码不需要一样。
具体keytool的用法请参见:注意事项:“您的名字与姓氏是什么?”这个问题我写的是“codecrazy.cn”,实践表明这个地方要填你访问网站时的域名。我这里填的是codecrazy.cn。如果没配置hosts文件,而是通过localhost来访问网站,那就填localhost。剩下的几个问题貌似随便填也没什么关系。
第三步:生成证书之后再配置tomcat的conf目录下的server.xml文件
port=8443这个Connector的配置初始情况下是注释掉的,去掉注释,并添加上述的一些属性配置。其中keystoreFile填的就是之前用keytool生成的tomcat.keystore文件的路径,keystorePass就是之前keytool命令中-storepass选项中指定的值。
对于protocol有多种配置方法,如是否启用apr的方式,不同的方式有不同的配置,具体可以参考官方文档这里我采用Http11Protocol,它采用的是BIO的方式处理网络连接请求。至于bio,nio,apr三种方式的区别是什么不在本文讨论之列。
然后启动tomcat,在启动过程输出的信息中可以看到多了一个监听在8443端口上的连接处理器,如下图所示:
在中间那一行出现了[“http-bio-8443”]这就是用来处理https安全连接的处理器的名字。8443代表的是在Connector中port指定的值,可以配置成其他的,生产环境中显然是配置成默认的443端口。”http-bio-8443”中间的“bio”是因为我们上面配置的是org.apache.coyote.http11.Http11Protocol,它采用的就是bio的方式来处理网络连接请求。(最前面的“http”感觉输出“https”比较合适一点)
此时通过访问tomcat还是没有建立安全的连接,因为浏览器中并没有安装证书,https的原理以及如何通过CA认证等不在本文讨论之列。本文采用的是一种叫做自签名证书的方法。
第四步:通过keytool工具来从keystore中导出证书来提供给浏览器使用
-keysotre选项指定的就是之前用keytool生成的keystore文件的路径, -file选项指定的就是导出证书的文件路径,具体如何使用请参见上文提供的使用keytool工具的链接。命令执行完之后就会在e:\sms\目录下面生成一个tomcat.crt的文件。
第五步:将该文件导入到浏览器中
不同的浏览器会有略有差别。对于chrome浏览器来说,在地址栏输入chrome://settings/进入设置界面,再点击最下面的“显示高级设置”然后往下找到
点击“管理证书”,*切换到如下图红框所示“受信任的根证书颁发机构”* tab页
点击导入,再点击下一步,选择“浏览”找到我们上面生成的tomcat.crt文件,然后一路“下一步”,最后完成。
至此大功告成。输入即可建立https连接。效果如下所示:地址栏https前面不再是红叉了,而是变成了绿色的,说明已经建立了安全连接。整个过程中有任何疑问,欢迎留言讨论。