一:概念简介
Tomcat 服务器是一个免费的开放源代码的Web 应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试 JSP 程序的首选。
HTTP 超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。
HTTPS(全称:Hyper Text Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。
HTTPS和HTTP的区别:
- HTTP 是超文本传输协议,信息是明文传输,HTTPS 则是具有安全性的 SSL 加密传输协议。
- HTTPS 协议需要到 CA 申请证书,一般免费证书很少,需要交费。
- HTTP 和 HTTPS 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
- HTTP 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 HTTP 协议安全。
二:为服务器生成证书
HTTPS 如果生产环境应用在域名上是需要直接或间接的从 CA 申请证书,来取得浏览器的信任的。我们先在本地模拟测试一下这个过程,自己使用jdk的keytool工具生成证书。
2.1 找到自己的%JAVA_HOME%/bin目录
计算机---->属性---->高级系统配置---->系统属性
2.2 生成服务器证书
(1)打开DOS窗口,通过命令进入到jdk的bin目录下。(C:Program FilesJavajdk1.8.0_60)
(2)创建存放生成证书的文件夹(G: omcat_cer)
(3)执行命令: keytool -genkey -v -alias tomcat -keyalg RSA -keystore G: omcat_cer omcat.keystore -validity 36500
参数说明: G: omcat_cer -->自己创建的存放证书的文件夹 ; tomcat.keystore -->生成的证书名称 ; validity 36500 -->证书有效期,36500表示100年,默认值是90天
(4)密钥库口令: password(这个密码非常重要,要求大于6个字符)
名字与姓氏:192.168.0.105(以后访问的域名或IP地址,非常重要,证书和域名或IP绑定)
组织单位名称,组织名称,城市,省市自治区,国家地区代码(随便填)
(5)打印 [正在存储G: omcat_cer omcat.keystore] ,证书生成完成
三:配置tomcat服务器
3.1 打开tomcat配置文件,如:D:/apache-tomcat/conf/server.xml,修改如下:
<?xml version="1.0" encoding="UTF-8"?> <Server port="8003" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <!-- 修改第一步:注释 className="org.apache.catalina.core.AprLifecycleListener" --> <!--<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> --> <Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" /> <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" /> <Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" /> <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources> <!-- 修改第二步:redirectPort端口改为443 (port端口,根据自己需要设置即可) --> <Service name="Catalina"> <Connector port="11000" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="443" /> <!-- 修改第三步:增加enableLookups="false" (port端口,根据自己需要设置即可) --> <Connector port="8002" enableLookups="false" protocol="AJP/1.3" redirectPort="443" /> <!-- 修改第四步:去掉注释且修改keystoreFile(证书文件的位置)、keystorePass(<tomcat>的主密码即刚刚设置的证书密码) 两个参数 --> <Connector port="443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="G: omcat_cer/tomcat.keystore" keystorePass="password"/> <!-- 修改结束 --> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> <Host name="127.0.0.1" appBase="phpwebapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>
3.2 打开tomcat配置文件,如:D:/apache-tomcat/conf/web.xml,在该文件</welcome-file-list>后面添加一段:
<!--配置证书开始--> <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> <!--配置证书结束-->
3.3 启动tomcat服务器,访问系统
使用以前保存的地址去访问,我们发现,默认的已经变成https协议了,但是没用权限访问,接下来,我们继续,为客户端生成证书
三:为客户端生成证书
具体步骤参考2.2,这里就不过多描述了( keytool -genkey -v -alias mykey -keyalg RSA -storetype PKCS12 -keystore G: omcat_cer omcat.p12 )
3.1 生成客户端p12证书
3.2 把客户端p12证书转为.cer格式证书
具体步骤参考2.2,这里就不过多描述了( keytool -export -alias mykey -keystore G: omcat_cer omcat.p12 -storetype PKCS12 -storepass password -rfc -file G: omcat_cer omcat.cer )
执行成功之后,我们在文件夹中可以看到相关证书
四:让服务器信任客户端证书(详见教程下)