在命令提示符窗口,进入Tomcat目录,执行以下命令:
keytool -genkey -alias tomcat -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore -validity 3600
通过以上步骤生成server.keystore证书文件、
注意: localhost,是网站的域名或者ip,根据实际情况填写,比如 www.baidu.com? 192.168.0.85? 否则会出现证书上的名称无效,或者与站点名称不匹配。
将servlet.xml一下的的注释打开(最好拷贝此段)
<!-- Define a SSL HTTP/1.1 Connector on port 8443 -->??
<Connector protocol="org.apache.coyote.http11.Http11Protocol"????
???????????????????? port="8443" maxHttpHeaderSize="8192"??
?????????? maxThreads="150" minSpareThreads="25" maxSpareThreads="75"??
?????????? enableLookups="false" disableUploadTimeout="true"??
?????????? acceptCount="100" scheme="https" secure="true"??
?????????? clientAuth="false" sslProtocol="TLS"???????????????????
?????????? keystoreFile="server.keystore"????
?????????? keystorePass="changeit"/>?
到这一步访问https;//ip:8443/item
一般Tomcat默认的SSL端口号是8443,但是对于SSL标准端口号是443,这样在访问网页的时候,直接使用https而不需要输入端口号就可以访问,如https://loalhost/webserver
想要修改端口号,需要修改Tomcat的server.xml文件:
1.non-SSL HTTP/1.1 Connector定义的地方,一般如下:
???? <Connector port="80" maxHttpHeaderSize="8192"
??????????????? maxThreads="500" minSpareThreads="25" maxSpareThreads="75"
??????????????? enableLookups="false" redirectPort="443" acceptCount="100"
??????????????? connectionTimeout="20000" disableUploadTimeout="true" />
将其中的redirectPort端口号改为:443
2.SSL HTTP/1.1 Connector定义的地方,修改端口号为:443,如下:
<Connector????
?? port="443" maxHttpHeaderSize="8192"
?? maxThreads="150" minSpareThreads="25"
?? maxSpareThreads="75"
?? enableLookups="false"
?? disableUploadTimeout="true"
?? acceptCount="100" scheme="https"
?? secure="true"
?? clientAuth="false" sslProtocol="TLS"
?? keystoreFile="conf/tomcat.keystore"
?? keystorePass="123456" />
3.AJP 1.3 Connector定义的地方,修改redirectPort为443,如下:
???? <Connector port="8009"
??????????????? enableLookups="false" redirectPort="443" protocol="AJP/1.3" />
重新启动Tomcat就可以了。到这一步可以形成访问方式 http://ip/item
到tomcat下面的webapps下面的ROOT下面的index.jsp文件的内容
<?xml version="1.0" encoding="ISO-8859-1"?>
? <%response.sendRedirect("/item");%>
修改web.xml文件的内容
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
??? xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
??? xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
??? version="2.4">
? <display-name>Welcome to Tomcat</display-name>
? <description>
???? Welcome to Tomcat
? </description>
? <welcome-file-list>
?? <welcome-file>/index.jsp</welcome-file>
? </welcome-file-list>
</web-app>
删除lib目录下的lib文件
重启Tomcat服务器,在这一步可以直接通过https:ip来访问项目
?
(附录:)tomcat的配置文件SSL部分详细说明
配置文件server.xml,SSL部分:
- ????<!--?A?"Connector"?represents?an?endpoint?by?which?requests?are?received ??
- ?????????and?responses?are?returned.?Documentation?at?: ??
- ?????????Java?HTTP?Connector:?/docs/config/http.html?(blocking?&?non-blocking) ??
- ?????????Java?AJP??Connector:?/docs/config/ajp.html ??
- ?????????APR?(HTTP/AJP)?Connector:?/docs/apr.html ??
- ?????????Define?a?non-SSL?HTTP/1.1?Connector?on?port?8080 ??
- ????-->??
- ????<Connector??port="8443"?maxHttpHeaderSize="8192"??
- ????????maxThreads="150"??
- ????????minSpareThreads="25"??
- ????????maxSpareThreads="75"??
- ????????enableLookups="false"??
- ????????disableUploadTimeout="true"??
- ????????acceptCount="100"??
- ????????scheme="https"??
- ????????secure="true"??
- ????????clientAuth="false"??
- ????????sslProtocol="TLS"??
- ????????keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"??
- ????????keystorePass="changeit"??
- ????????algorithm="SunX509"??
- ????/>??
- ????<!--?A?"Connector"?represents?an?endpoint?by?which?requests?are?received ??
- ?????????and?responses?are?returned.?Documentation?at?: ??
- ?????????Java?HTTP?Connector:?/docs/config/http.html?(blocking?&?non-blocking) ??
- ?????????Java?AJP??Connector:?/docs/config/ajp.html ??
- ?????????APR?(HTTP/AJP)?Connector:?/docs/apr.html ??
- ?????????Define?a?non-SSL?HTTP/1.1?Connector?on?port?8080 ??
- ????-->??
- ????<Connector??port="8443"?maxHttpHeaderSize="8192"??
- ????????maxThreads="150"??
- ????????minSpareThreads="25"??
- ????????maxSpareThreads="75"??
- ????????enableLookups="false"??
- ????????disableUploadTimeout="true"??
- ????????acceptCount="100"??
- ????????scheme="https"??
- ????????secure="true"??
- ????????clientAuth="false"??
- ????????sslProtocol="TLS"??
- ????????keystoreFile="D:/Tomcat/conf/tomcatKey.keystore"??
- ????????keystorePass="changeit"??
- ????????algorithm="SunX509"??
- ????/>??
??? <!-- A "Connector" represents an endpoint by which requests are received ???????? and responses are returned. Documentation at : ???????? Java HTTP Connector: /docs/config/http.html (blocking & non-blocking) ???????? Java AJP? Connector: /docs/config/ajp.html ???????? APR (HTTP/AJP) Connector: /docs/apr.html ???????? Define a non-SSL HTTP/1.1 Connector on port 8080 ??? --> <Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="D:/Tomcat/conf/tomcatKey.keystore" keystorePass="changeit" algorithm="SunX509" />
?
属性说明:
?port:???? 这个port属性(默认值是8443)是 TCP/IP端口数码,Tomcat在其上监听安全连接。你可以把它更改成任何你愿意要的数值(如默认的https通信,数目是443)。不过,在许多操作系统中,要想在比1024小的端口数码上运行Tomcat,需要特殊的设置(它超出了这个文档资料的范围)。
?
redirectPort:?如果你在这里更改端口数值,你还必须更改在non-SSL连接器上的redirectPort 这个属性特定的值。这允许Tomcat自动地redirect那些试图访问有安全限制页面的用户,指明根据 Servlet 2.4 Specification要求,SSL是必需的
?
clientAuth:?如果你想要Tomcat要求所有的SSL客户在使用这个socket时出示用户认证书,把这个值设定为 true 。如果你想要Tomcat要求出示用户认证书,但是如果没有认证书也可以, 就把这个值设定为want 。
?
keystoreFile:?如果你产生的keystore文件不在Tomcat期望的默认地方(一个叫做.keystore 的文件在Tomcat运行的主目录),就添加这个属性。你可以指定一个绝对路径名称, 或者一个由$CATALINA_BASE环境变量而派生的相对路径名称。
?
keystorePass:?如果你使用一个不同的keystore(以及认证书)密码,而不是Tomcat期望的密码 (就是changeit),添加这个元素。
?
keystoreType:?如果使用一个PKCS12 keystore的话,就添加这个element。 有效的值是JKS 和 PKCS12
?
sslProtocol:?要在这个socket上被使用的加密/解密协定。如果你在使用Sun的JVM,我们不提倡更改 这个值。据报道,TLS协定的IBM's 1.4.1 实现与一些通用的浏览器不兼容。 如果是这样,就使用value SSL
?
ciphers:?这个socket允许使用的由逗号分隔开的加密密码列单。默认的情况下,任何可用的密码都允许被使用。
?
algorithm:?可用的X509算法。默认是Sun的实现( SunX509 )。 对于IBM JVMs,你应该使用值 IbmX509。对于其他卖主,查阅JVM文档资料来 找正确的值。
?
truststoreFile:?用来验证用户认证书的TrustStore文件。
?
truststorePass:?访问TrustStore的密码。默认值就是keystorePass的值。
?
truststoreType:?如果你在使用与KeyStore不同格式的TrustStore,添加这个元素。 合法的值是JKS和PKCS12
?
keyAlias:?如果 keystore 里面有多个 key,你可以为用这个选项为加入的 key 起一个名字。 如果没有指定名字,使用时 keystore 内的第一个 key 将会被使用。