日韩久久久精品,亚洲精品久久久久久久久久久,亚洲欧美一区二区三区国产精品 ,一区二区福利

Tomcat 7.0配置SSL的問(wèn)題及解決辦法

系統(tǒng) 2156 0
?
以前一直在用Tomcat 6.0.29版本,今下載了apache-tomcat-7.0.33-windows-x86.zip試試,結(jié)果在配置SSL時(shí)遇到一些問(wèn)題。
Tomcat 6版本配置SSL過(guò)程有兩步:
1、用JDK自帶的keytool.exe來(lái)生成私有密鑰和自簽發(fā)的證書,如下:
Java代碼 復(fù)制代碼 收藏代碼
  1. keytool -genkey -keyalg RSA -alias tomcat??
      keytool -genkey -keyalg RSA -alias tomcat 




    
按提示輸入相關(guān)內(nèi)容后,這條命令將在默認(rèn)密鑰庫(kù)文件里新增一個(gè)別名為tomcat的私有密鑰項(xiàng)及其自簽發(fā)的證書。默認(rèn)密鑰庫(kù)文件為:
Java代碼 復(fù)制代碼 收藏代碼
  1. %USERPROFILE%\.keystore???
      %USERPROFILE%\.keystore  


    
2、修改Tomcat的conf\server.xml文件,即增加下面一段:
Java代碼 復(fù)制代碼 收藏代碼
  1. <Connector port= "8443" protocol= "HTTP/1.1" SSLEnabled= "true" ??????????? maxThreads= "150" scheme= "https" secure= "true" ??????????? clientAuth= "false" sslProtocol= "TLS" ??????????? keystoreFile= "${user.home}/.keystore" ??????????? keystorePass= "changeit" />??
      <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"            maxThreads="150" scheme="https" secure="true"            clientAuth="false" sslProtocol="TLS"            keystoreFile="${user.home}/.keystore"            keystorePass="changeit" /> 


    
這里的${user.home}就是上面的%USERPROFILE%,只是一個(gè)是Java語(yǔ)法,另一個(gè)是Windows語(yǔ)法。
設(shè)置好就能正常啟動(dòng)Tomcat了。
可是按同樣的方法來(lái)配置Tomcat 7卻啟動(dòng)不起來(lái),報(bào)如下錯(cuò)誤:
Java代碼 復(fù)制代碼 收藏代碼
  1. 嚴(yán)重: Failed to initialize end point associated with ProtocolHandler [ "http-apr-8443" ]? java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR????????? at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java: 494 )????????? at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java: 610 )????????? at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java: 429 )????????? at org.apache.catalina.connector.Connector.initInternal(Connector.java: 981 )????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 102 )????????? at org.apache.catalina.core.StandardService.initInternal(StandardService.java: 559 )????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 102 )????????? at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java: 814 )????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 102 )????????? at org.apache.catalina.startup.Catalina.load(Catalina.java: 633 )????????? at org.apache.catalina.startup.Catalina.load(Catalina.java: 658 )????????? at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)????????? at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 )????????? at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 )????????? at java.lang.reflect.Method.invoke(Method.java: 597 )????????? at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java: 281 )????????? at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java: 450 )? - 12 - 2 12 : 01 : 16 org.apache.catalina.core.StandardService initInternal? 嚴(yán)重: Failed to initialize connector [Connector[HTTP/ 1.1 - 8443 ]]? org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/ 1.1 - 8443 ]]????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 106 )????????? at org.apache.catalina.core.StandardService.initInternal(StandardService.java: 559 )????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 102 )????????? at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java: 814 )????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 102 )????????? at org.apache.catalina.startup.Catalina.load(Catalina.java: 633 )????????? at org.apache.catalina.startup.Catalina.load(Catalina.java: 658 )????????? at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)????????? at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java: 39 )????????? at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java: 25 )????????? at java.lang.reflect.Method.invoke(Method.java: 597 )????????? at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java: 281 )????????? at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java: 450 )? Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed????????? at org.apache.catalina.connector.Connector.initInternal(Connector.java: 983 )????????? at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java: 102 )????????? ... 12 more? Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR????????? at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java: 494 )????????? at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java: 610 )????????? at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java: 429 )????????? at org.apache.catalina.connector.Connector.initInternal(Connector.java: 981 )????????? ... 13 more?
      嚴(yán)重: Failed to initialize end point associated with ProtocolHandler ["http-apr-8443"]  java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR          at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:494)          at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)          at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:429)          at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.startup.Catalina.load(Catalina.java:633)          at org.apache.catalina.startup.Catalina.load(Catalina.java:658)          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)          at java.lang.reflect.Method.invoke(Method.java:597)          at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)  -12-2 12:01:16 org.apache.catalina.core.StandardService initInternal  嚴(yán)重: Failed to initialize connector [Connector[HTTP/1.1-8443]]  org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-8443]]          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:106)          at org.apache.catalina.core.StandardService.initInternal(StandardService.java:559)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:814)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          at org.apache.catalina.startup.Catalina.load(Catalina.java:633)          at org.apache.catalina.startup.Catalina.load(Catalina.java:658)          at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)          at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)          at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)          at java.lang.reflect.Method.invoke(Method.java:597)          at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:281)          at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:450)  Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed          at org.apache.catalina.connector.Connector.initInternal(Connector.java:983)          at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:102)          ... 12 more  Caused by: java.lang.Exception: Connector attribute SSLCertificateFile must be defined when using SSL with APR          at org.apache.tomcat.util.net.AprEndpoint.bind(AprEndpoint.java:494)          at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:610)          at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:429)          at org.apache.catalina.connector.Connector.initInternal(Connector.java:981)          ... 13 more


    
仔細(xì)看上面的異常信息發(fā)現(xiàn)這是APR報(bào)的錯(cuò)誤。Tomcat 6也有APR包但我從來(lái)都沒(méi)用過(guò)。為此查看了Tomcat的ssl-how,在“Edit the Tomcat Configuration File”一節(jié)中說(shuō)到:
Tomcat提供了兩個(gè)SSL實(shí)現(xiàn),一個(gè)是JSSE實(shí)現(xiàn),另一個(gè)是APR實(shí)現(xiàn)。
Tomcat將自動(dòng)選擇使用哪個(gè)實(shí)現(xiàn),即如果安裝了APR則自動(dòng)選擇APR,否則選擇JSSE。
如果不希望讓Tomcat自動(dòng)選擇,而是我們自己指定一個(gè)實(shí)現(xiàn)則可通過(guò)protocol定義,如下:
Java代碼 復(fù)制代碼 收藏代碼
  1. <Connector protocol= "..." />??
      <Connector protocol="..." /> 


    
我又查看了6.0的相同說(shuō)明,里面與7.0的說(shuō)明一模一樣。因此問(wèn)題只可能是:是否安裝了APR包。
以前只聽(tīng)說(shuō)過(guò)APR但沒(méi)弄過(guò)。APR是什么文件?后來(lái)才發(fā)現(xiàn)APR文件名為tcnative-1.dll。進(jìn)一步檢查6.0和7.0的安裝目錄,結(jié)果發(fā)現(xiàn)6.0里沒(méi)這個(gè)dll文件,而7.0里有。換句話說(shuō),6.0默認(rèn)使用JSSE實(shí)現(xiàn),而7.0默認(rèn)使用APR實(shí)現(xiàn)。
弄明白緣由就好辦了。由于習(xí)慣使用6.0的配置方式(即JSEE實(shí)現(xiàn)),因此只要把上面conf\server.xml里的protocol修改一下就行了:
Java代碼 復(fù)制代碼 收藏代碼
  1. <Connector port= "8443" protocol= "org.apache.coyote.http11.Http11Protocol" SSLEnabled= "true" ??????????? maxThreads= "150" scheme= "https" secure= "true" ??????????? clientAuth= "false" sslProtocol= "TLS" ??????????? keystoreFile= "${user.home}/.keystore" ??????????? keystorePass= "changeit" />??
      <Connector port="8443" protocol="org.apache.coyote.http11.Http11Protocol" SSLEnabled="true"            maxThreads="150" scheme="https" secure="true"            clientAuth="false" sslProtocol="TLS"            keystoreFile="${user.home}/.keystore"            keystorePass="changeit" /> 


    
重新啟動(dòng),一切正常。
應(yīng)用程序HTTP自動(dòng)跳轉(zhuǎn)到HTTPS,解決如下,打開(kāi) 項(xiàng)目的web.xml ,添加如下配置
Java代碼 復(fù)制代碼 收藏代碼
  1. <security-constraint>???
  2. ?????? <web-resource-collection >???
  3. ????????????? <web-resource-name >eqm</web-resource-name>? ?
  4. ????????????? <url-pattern>/*</url-pattern>? ?
  5. ?????? </web-resource-collection>??
  6. ???????????????????????????????
  7. ?????? <user-data-constraint>???
  8. ????????????? <transport-guarantee>CONFIDENTIAL</transport-guarantee>? ?
  9. ?????? </user-data-constraint>???
  10. </security-constraint>?
      <security-constraint> 

       <web-resource-collection > 

              <web-resource-name >eqm</web-resource-name> 

              <url-pattern>/*</url-pattern> 

       </web-resource-collection>

                             

       <user-data-constraint> 

              <transport-guarantee>CONFIDENTIAL</transport-guarantee> 

       </user-data-constraint> 

</security-constraint>
    

?

Tomcat 7.0配置SSL的問(wèn)題及解決辦法


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦!!!

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 石泉县| 同心县| 镇原县| 道孚县| 祁阳县| 宽城| 和龙市| 涟水县| 和平县| 双辽市| 信丰县| 东阿县| 内黄县| 鄱阳县| 抚松县| 平利县| 玉门市| 龙州县| 新干县| 南城县| 湟源县| 淅川县| 五原县| 缙云县| 西乡县| 嵊州市| 福贡县| 沁水县| 垦利县| 来凤县| 石嘴山市| 泰宁县| 资兴市| 山丹县| 拜城县| 甘德县| 宁明县| 潜江市| 阿城市| 宜宾县| 胶南市|