tomcat端口介绍以及配置启用https

一、tomcat 默认端口

  1. <Server port="8005" shutdown="SHUTDOWN"> 远程停服务端口
  2. <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/> 其中8080为HTTP端口,8443为默认HTTPS端口
  3. <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> 8009为AJP端口,服务器之间的通信使用该端口

二、tomcat配置文件介绍

<Server port="8005" shutdown="SHUTDOWN">
<!-- 
属性说明
 port:指定一个端口,这个端口负责监听关闭Tomcat的请求
 shutdown:向以上端口发送的关闭服务器的命令字符串
-->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
  <Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
  <Listener className="org.apache.catalina.storeconfig.StoreConfigLifecycleListener"/>
  <GlobalNamingResources>
    <Environment name="simpleValue" type="java.lang.Integer" value="30"/>
    <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>
<!--每个Service元素只能有一个Engine元素.元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求-->
  
<!--
属性说明
 name:Service的名称
-->
<Service name="Catalina">
    <!--Connector元素:由Connector接口定义.<Connector>元素代表与客户程序实际交互的组件,它负责接收客户请求,以及向客户返回响应结果-->
    <Connector port="80" maxHttpHeaderSize="8192"
       maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
       enableLookups="false" redirectPort="8443" acceptCount="100"
       connectionTimeout="20000" disableUploadTimeout="true" />
    <!-- 属性说明
	  port:服务器连接器的端口号,该连接器将在指定端口侦听来自客户端的请求。
	  enableLookups:如果为true,则可以通过调用request.getRemoteHost()进行DNS查询来得到远程客户端的实际主机名若为false则不进行DNS查询,而是返回其ip地址。
	  redirectPort:服务器正在处理http请求时收到了一个SSL传输请求后重定向的端口号。
	  acceptCount:当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回Connection refused错误。
	  connectionTimeout:等待超时的时间数(以毫秒为单位)。
	  maxThreads:设定在监听端口的线程的最大数目,这个值也决定了服务器可以同时响应客户请求的最大数目.默认值为200。
	  protocol:必须设定为AJP/1.3协议。
	  address:如果服务器有两个以上IP地址,该属性可以设定端口监听的IP地址,默认情况下,端口会监听服务器上所有IP地址。
	  minProcessors:服务器启动时创建的处理请求的线程数,每个请求由一个线程负责。
	  maxProcessors:最多可以创建的处理请求的线程数。
	  minSpareThreads:最小备用线程 。
	  maxSpareThreads:最大备用线程。
	  debug:日志等级。
	  disableUploadTimeout:禁用上传超时,主要用于大数据上传时。
    -->

    <Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
    <!-- 负责和其他HTTP服务器建立连接。在把Tomcat与其他HTTP服务器集成时就需要用到这个连接器。 -->
    <Engine name="Catalina" defaultHost="localhost">
    <!-- 属性说明
	  name:对应$CATALINA_HOME/config/Catalina中的Catalina 
      defaultHost:对应Host元素中的name属性,也就是和$CATALINA_HOME/config/Catalina/localhost中的localhost 缺省的处理请求的虚拟主机名,它至少与其中的一个Host元素的name属性值是一样的
      debug:日志等级
    -->

      <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
    <!-- 由Host接口定义.一个Engine元素可以包含多个<Host>元素。每个<Host>的元素定义了一个虚拟主机.它包含了一个或多个Web应用。-->
    <Host name="localhost" appBase="webapps"
       unpackWARs="true" autoDeploy="true"
       xmlValidation="false" xmlNamespaceAware="false">
	
    <!-- 属性说明
	  name:在此例中一直被强调为$CATALINA_HOME/config/Catalina/localhost中的localhost虚拟主机名
	  debug:是日志的调试等级 
	  appBase:默认的应用路径,也就是把应用放在一个目录下,并在autoDeploy为true的情况下,可自动部署应用此路径相对于$CATALINA_HOME/ (web applications的基本目录)
	  unpackWARs:设置为true,在Web应用为*.war是,解压此WAR文件. 
				   如果为true,则tomcat会自动将WAR文件解压;否则不解压,直接从WAR文件中运行应用程序.
	  autoDeploy:默认为true,表示如果有新的WEB应用放入appBase 并且Tomcat在运行的情况下,自动载入应用 
    -->

	<Context path="/demm" docBase="E:\\projects\\demm\\WebRoot" debug="0" reloadable="true" > 
        </Context>
    <!-- 属性说明
	  path:访问的URI,如:http://localhost/是我的应用的根目录,访问此应用将用:http://localhost/demm进行操作,此元素必须,表示此web application的URL的前缀,用来匹配一个Context。请求的URL形式为http://localhost:8080/path/*
      docBase:WEB应用的目录,此目录必须符合Java WEB应用的规范,web application的文件存放路径或者是WAR文件存放路径。
      debug:日志等级 
      reloadable:是否在程序有改动时重新载入,设置成true会影响性能,但可自动载入修改后的文件,
	    如果为true,则Tomcat将支持热部署,会自动检测web application的/WEB-INF/lib和/WEB-INF/classes目录的变化,
		自动装载新的JSP和Servlet,我们可以在不重起Tomcat的情况下改变web application
    -->
      </Host>
    </Engine>
  </Service>
</Server>

三、创建tomcat证书

        https协议需要证书,为了开发去CA买证书是浪费,使用jdk自带的keytool工具做一个开发测试用足够。详细可参考 jdk8的keytool的官方文档:https://docs.oracle.com/javase/8/docs/technotes/tools/windows/keytool.html#CHDBGFHE

HTTP重定向至HTTPS也就是将80端口重定向至443端口

3.1利用JDK自带的keytool工具来生成证书:

3.1.1. 在jdk的安装目录\bin\keytool.exe下打开命令行提示符

2. 在命令行中输入生成keystore的命令,新生成一个密钥库:

keytool -genkeypair -alias oycsso -keyalg RSA -validity 36500 -storepass 123456 -keystore E:/oycsso .keystore -v
  • -alias "oycsso":证书项的名字,必填项
  • -keyalg RSA:证书签名算法,tomcat建议RSA
  • -validity 36500:证书有效期,36500天,即100年
  • -storepass 123456:密钥库密码,也就是等下要生成的oycsso.keystore的访问密码,妥善保管
  • -keystore "E:\oycsso.keystore":要生成的文件的位置,存储在E盘根目录
  • -v:该选项会显示比较详细的信息 

   

以上命令将生产一对非对称密钥和自我签名的证书E:\oycsso.keystore

注意:“名字与姓氏”应该是域名,输成了姓名,和真正运行的时候域名不符,会出问题

3.2配置tomcat服务器

定位到tomcat服务器的安装目录, 找到conf下的server.xml文件

6、修改tomcat配置文件

<!--老版本tomcat的配置,在tomcat8下测试成功-->
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443"/>
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol"
    maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
    clientAuth="false" sslProtocol="TLS" keystoreFile="/conf/oycsso.keystore"
    keystorePass="123456"/>

注意:以上配置是老版本tomcat的配置,从tomcat8.5开始tomcat更改了配置形式,如上配置估计在tomcat10的时候会完全废弃,在tomcat9.0下测试成功的配置如下:

<!--新版本tomcat的配置,在tomcat9下测试成功-->
<Connector connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="443" />
<Connector port="443" protocol="org.apache.coyote.http11.Http11Nio2Protocol" maxThreads="150" SSLEnabled="true" scheme="https" secure="true">
        <SSLHostConfig>
            <Certificate certificateKeystoreFile="conf/oycsso.keystore" certificateKeystorePassword="123456" />
        </SSLHostConfig>
</Connector>

要修改的配置文件是tomcat的server.xml文件。仔细看上面的配置,第一个Connector是默认就有的,这里只是把8080端口改成了公认的80端口,把8443端口改成了公认的443端口。第二个Connector默认是注释掉的,搜索8443就能找到,直接把上述第二个Connector粘贴到server.xml中第一个Connector的下面,方便管理。keystoreFile=”/conf/oycsso.keystore”就是刚才copy的文件的位置,可以自己改到其他位置。keystorePass=”123456”就是刚才创建密钥库时使用的口令。

3.3 测试

四、chrome提示ERR_SSL_VERSION_OR_CIPHER_MISMATCH

今天配完tomcat ssl后,发现页面无法访问。chrome提示以下:

访问错误.png

解决方案,在ssl的那个connector配置指定加密协议集:

ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,     
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,
    TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,
    TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,
    SSL_RSA_WITH_RC4_128_SHA"


具体connector配置如下:

<Connector port="443" protocol="HTTP/1.1" SSLEnabled="true"
    maxThreads="150" scheme="https" secure="true" URIEncoding="UTF-8" 
    keystoreFile="conf/chinanetcenter.tomcat"  keystorePass="2013111"
    clientAuth="false" sslProtocol="TLS" keystoreType="PKCS12" 
    ciphers="TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,     
    TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA384,
    TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_RSA_WITH_RC4_128_SHA,
    TLS_RSA_WITH_AES_128_CBC_SHA256,TLS_RSA_WITH_AES_128_CBC_SHA,
    TLS_RSA_WITH_AES_256_CBC_SHA256,TLS_RSA_WITH_AES_256_CBC_SHA,
    SSL_RSA_WITH_RC4_128_SHA"
    compression="on" compressionMinSize="50" noCompressionUserAgents="gozilla, traviata"
    compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>

配置完后,就可以访问页面了。

 

五、导出数字证书

有了数字证书(尽管没有被CA认证,但是可以先用着),我们就需要将数字证书导出,格式为*.cer,命令参数如下:

根据刚才生成的keystore证书,我们导出cer证书,实现如下:

keytool -exportcert -alias oycsso -keystore E:/oycsso.keystore -file E:/oycsso.cer -rfc

在这里我们可以使用 -storepass参数指定证书所使用的密码

keytool -exportcert -alias oycsso -keystore d:/oycsso.keystore -file d:/oycsso.cer -rfc -storepass 123456

生成了数字证书,我们可以使用-printcert命令打印出证书的相关信息:

到此为止,我们使用keytool生成了两个数字证书,一个是keystore格式的,一个cer格式的,他们都没有经过CA机构认证,没有任何的法律效力,但是可以正常使用的,比如,把keystore格式的证书导入Tomcat中,cer格式的证书导入浏览器中,或是使用cer证书构建Java Https请求,这都是Https单项认证。

六、构建CA签发证书

如果哪一天,我们需要一个CA机构认证过的数字证书(产品上线的话就会了,总不能让客户手动往浏览器添加cer证书吧),我们就需要生成CA数字证书签发申请(CSR),该证书格式为*.csr

有关生成证书请求的命令参数如下:

在这里我们依旧依靠keystore证书来生乘csr

keytool -certreq -alias oycsso -keystore E:/oycsso.keystore -file E:/oycsso.csr -v


还是比较人性化的,还有提示。

七、导入证书信任库

获得CA签发的数字证书后,我们需要将其导入到信任库,使用的命令为-importcert,参数如下:

具体实现如下:

keytool -importcert -trustcacerts -alias oycsso -file E:/oycsso.cer -keystore E:/oycsso.keystore

查看证书命令

keytool -list -alias oycsso -keystore E:/oycsso.keystore

 

  • 0
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值