मैं Apache Tomcat में SSLv3 समर्थन को कैसे निष्क्रिय करूँ?


20

मैं अपने Apache Tomcat सर्वर को केवल TLSv1 का उपयोग करने के लिए पुन: कॉन्फ़िगर करने का प्रयास कर रहा हूं। हालाँकि, यह अभी भी कुछ ब्राउज़रों का उपयोग करके SSLv3 पर वापस गिर रहा है।

मैं निम्नलिखित सेटिंग्स के साथ <कनेक्टर> टैग सेटअप करता हूं:

<Connector ...
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200"
       scheme="https" secure="true" SSLEnabled="true"
       clientAuth="false" sslProtocol="TLS" ciphers="TLS_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA" sslEnabledProtocols="TLSv1" />

क्या मुझे एक विन्यास सेटिंग याद आ रही है या किसी दिन मेरे पास मौजूद होना चाहिए?


V3 के साथ क्या समस्या है? मुझे लगा कि v1 में सुरक्षा के मुद्दे थे।
एमडीपीसी

8
@mdpc POODLE SSLv3 को प्रभावित करता है।
कवरोसगेन

2
टॉम्कट संस्करण? JDK संस्करण? हाल के संस्करणों में sslProtocol डिफ़ॉल्ट रूप से TLS है।
ज़ेवियर लुकास

2
rmeisen: उत्तर आपके Tomcat और Java संस्करणों के आधार पर अलग-अलग होंगे, और यदि आप JSSE छंद AJP का उपयोग कर रहे हैं। अंतर sslProtocols=TLSv1छंद के रूप में सूक्ष्म हैं sslProtocol="TLS"(ध्यान दें s?)। अपने टॉमकैट और जावा संस्करणों को निर्दिष्ट करना आपको पागलपन से बचाएगा।
स्टीफन लासिवस्की

जवाबों:


12

Tomcat 5 और संस्करण 6 SSLEnabled के संस्करण के आधार पर = "सही" काम नहीं कर सकता क्योंकि यह मध्य-रिलीज़ जोड़ा गया था। इसे पाने के लिए आपको बस निम्नलिखित को संपादित करने की आवश्यकता है: sslProtocols = TLS To: sslProtocols = "TLSv1, TLSv1.1, TLSv1.2"

अजीब लगता है, लेकिन भले ही यह टीएलएस कहता है, इसमें एसएसएल 3 शामिल है।

यह हमारे Tomcat 5.5.20 और हमारे Tomcat 6 उदाहरणों पर तय किया। -Greg

मेरा मानना ​​है कि आपको क्या करना है:

Jboss:

<Connector protocol="HTTP/1.1" SSLEnabled="true" 
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200"
       scheme="https" secure="true" clientAuth="false" 
       keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
       keystorePass="rmi+ssl"
       sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

सिफर सूट परिभाषा पर निश्चित नहीं है कि sslprotocols को सिर्फ TLSv1, TLSv1.1, TLSv1.2 पर सेट किया जाना चाहिए

आपके टॉमकैट संस्करण के आधार पर यह भिन्न होगा, अन्य संभावित समाधान:

टॉमकैट 5 और 6

<Connector...
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
   clientAuth="false" sslEnabledProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

** आरएचईएल 5-आधारित डिस्ट्रोस पर, टॉमकैट 6.0.38 से पहले टॉमकैट 6 संस्करणों पर निम्नलिखित लागू होता है **

ध्यान दें कि TLSv1.1,TLSv1.2जावा 7 द्वारा समर्थित है, जावा 6 नहीं। जावा 6 से चलने वाले सर्वर में इन निर्देशों को जोड़ना हानिरहित है, लेकिन TLSv1.1 और TLSv1.2 को सक्षम नहीं करेगा।

<Connector...
   enableLookups="true" disableUploadTimeout="true"
   acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
   clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

टोमकट> = 7

<Connector...
       enableLookups="true" disableUploadTimeout="true"
       acceptCount="100"  maxThreads="200" SSLEnabled="true" scheme="https" secure="true"
       clientAuth="false" sslProtocols = "TLSv1,TLSv1.1,TLSv1.2" />

टॉमकैट एपीआर कनेक्टर

<Connector...
               maxThreads="200"
               enableLookups="true" disableUploadTimeout="true"
               acceptCount="100" scheme="https" secure="true"
               SSLEnabled="true" 
               SSLProtocol="TLSv1"
               SSLCertificateFile="${catalina.base}/conf/localhost.crt"
               SSLCertificateKeyFile="${catalina.base}/conf/localhost.key" />

ऊपर जो आपके कनेक्टर विनिर्देशों के ऊपर थे उसे पूरा करने के लिए बदल दिया गया है। स्रोत: https://access.redhat.com/solutions/1232233


1
FYI करें, sslEnabledProtocolsटॉमकैट 6 पर हमारे लिए काम नहीं sslProtocols = "TLSv1,...."किया। 6. किया।
स्टीफन लासिवस्की

4

मेरे पास एक समान उपयोग का मामला है, जो कि टॉमस्कैट 7 को केवल TLSv1.2 का सख्ती से उपयोग करने में सक्षम करने के लिए है, न कि पहले के एसएसएल प्रोटोकॉल जैसे टीएलएसवी 1 या एसएसएलवी 3 पर वापस गिरने के लिए।

मैं उपयोग कर रहा हूँ: C: \ Apache-tomcat-7.0.64-64bit और C: \ Java64 \ jdk1.8.0_60।

इस निर्देश का पालन करें: https://tomcat.apache.org/tomcat-7.0-doc/security-howto.html । एसएससी समर्थन को सेटअप करने के लिए टॉमकैट अपेक्षाकृत सरल है।

कई संदर्भों से मैंने कई संयोजन का परीक्षण किया, आखिरकार मुझे 1 मिला जो कि टॉमस्कैट 7 को केवल टीएलएसवी 1.2 को स्वीकार करने के लिए लागू करेगा। 2 स्थानों को छूने की जरूरत:

1) C: \ Apache-tomcat-7.0.64-64bit \ conf \ server.xml में

<Connector port="8443" 
 protocol="org.apache.coyote.http11.Http11Protocol"
 maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
 keystoreFile="ssl/.keystore" keystorePass="changeit"
 clientAuth="false" sslProtocol="SSL" sslEnabledProtocols="TLSv1.2" />

कहाँ पे

keystoreFile = स्थानीय स्व-हस्ताक्षरित ट्रस्ट स्टोर

org.apache.coyote.http11.Http11Protocol = JSSE BIO कार्यान्वयन।

हम उपयोग नहीं करते हैं org.apache.coyote.http11.Http11AprProtocol, क्योंकि यह ओपनसेल द्वारा संचालित है। अंतर्निहित एसएसएल प्रोटोकॉल का समर्थन करने के लिए अंतर्निहित ओपनसेल वापस गिर जाएगा।

2) टॉमकैट शुरू करते समय, निम्नलिखित पर्यावरण मापदंडों को सक्षम करें।

set JAVA_HOME=C:\Java64\jdk1.8.0_60
set PATH=%PATH%;C:\Java64\jdk1.8.0_60\bin
set CATALINA_HOME=C:\apache-tomcat-7.0.64-64bit
set JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2" -Dsun.security.ssl.allowUnsafeRenegotiation=false -Dhttps.protocols="TLSv1.2"

JAVA_OPTS प्रतिबंध की आवश्यकता है, अन्यथा टॉमकैट (जो कि Java8 द्वारा संचालित है) पहले के एजेंट के समर्थन के लिए वापस गिर जाएगा।

टॉमकैट शुरू करें C:\apache-tomcat-7.0.64-64bit\bin\startup.bat

हम देख सकते हैं JAVA_OPTS टॉमकैट स्टार्टअप लॉग में दिखाई देता है।

Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Djdk.tls.client.protocols=TLSv1.2
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dsun.security.ssl.allowUnsafeRenegotiation=false
Oct 16, 2015 4:10:17 PM org.apache.catalina.startup.VersionLoggerListener log
INFO: Command line argument: -Dhttps.protocols=TLSv1.2

फिर, हम अपने सेटअप को सत्यापित करने के लिए ओपनस् कमांड का उपयोग कर सकते हैं। पहले लोकलहोस्ट कनेक्ट करें: 8443 टीएलएसवी 1.1 प्रोटोकॉल के साथ। टॉम्कट सर्वर प्रमाणपत्र के साथ उत्तर देने से इंकार करता है।

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_1
Loading 'screen' into random state - done
CONNECTED(000001C0)
5372:error:1408F10B:SSL routines:SSL3_GET_RECORD:wrong version number:.\ssl\s3_pkt.c:362:
---
no peer certificate available
---
No client certificate CA names sent
---
SSL handshake has read 5 bytes and written 0 bytes

कनेक्टेड लोकलहोस्ट: 8443 TLSv1.2 प्रोटोकॉल के साथ, Tomcat सर्टिफिकेट के साथ ServerHello का जवाब देता है:

C:\OpenSSL-Win32\bin>openssl s_client -connect localhost:8443 -tls1_2
Loading 'screen' into random state - done
CONNECTED(000001C0)
depth=1 C = US, ST = Washington, L = Seattle, O = getaCert - www.getacert.com
verify error:num=19:self signed certificate in certificate chain
---
Certificate chain
0 s:/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
1 s:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
   i:/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
Server certificate
-----BEGIN CERTIFICATE-----
(ignored)
-----END CERTIFICATE-----
subject=/C=SG/ST=SG/L=Singapore/O=Xxxx/OU=Development/CN=Myself
issuer=/C=US/ST=Washington/L=Seattle/O=getaCert - www.getacert.com
---
No client certificate CA names sent
Peer signing digest: SHA512
Server Temp Key: ECDH, P-256, 256 bits
---
SSL handshake has read 2367 bytes and written 443 bytes

यह साबित करता है कि टॉमकैट अब केवल TLSv1.2 अनुरोध का सख्ती से जवाब देता है।


बहुत अच्छा और पूरी तरह से जवाब! कुडोस!
जेनी डी का कहना है कि मोनिका

मैंने पाया है कि JAVA_OPTS=-Djdk.tls.client.protocols="TLSv1.2आवश्यक नहीं है (टॉमकैट 8.0.29, जावा 1.8.0_74)। इसका उल्लेख यहाँ नहीं किया गया है: wiki.apache.org/tomcat/Security/POODLE
Paul


0

Tomcat 6.0.41 में, आपको अवरुद्ध कनेक्टर का उपयोग करने की आवश्यकता होगी क्योंकि NIO एक उन सेटिंग्स को अनदेखा कर रहा है।

http://wiki.apache.org/tomcat/Security/POODLE

http://mail-archives.apache.org/mod_mbox/tomcat-users/201410.mbox/%3C5440F1C6.3040205@apache.org%3E

कनेक्टर पोर्ट = "443" प्रोटोकॉल = "org.apache.coyote.http11.Http11Protocol" maxThreads = "200" योजना = "https" सुरक्षित = "सत्य" SSLEnabled = "सत्य" क्लाइंटऑथ = "गलत
" कीस्टॉरफाइल = "tomcat.jks" "keystorePass =" चेंज "sslEnabledProtocols =" TLSv1, TLSv1.1, TLSv1.2 "/>


0

टॉमकैट 5.5 में आपको अनिर्दिष्ट पैरामीटर का उपयोग करना चाहिए

protocols="TLSv1"

इस प्रोटोकॉल संस्करण का उपयोग करने को प्रतिबंधित करने के लिए।


0

SSL 3 (POODLE) को Jboss 4.0.3 SP1 (टॉमकैट 5.5 में जावा 1.5 के साथ) को server.xml में निष्क्रिय करने के लिए अपना कोड इस तरह बदलें।

<Connector port="443" address="${jboss.bind.address}" maxThreads="100" strategy="ms" maxHttpHeaderSize="8192" emptySessionPath="true" scheme="https" secure="true" clientAuth="false" keystoreFile="${jboss.server.home.dir}/conf/eCP.keystore" keystorePass="password" sslProtocol="TLS" protocols="TLSv1,TLSv1.1,TLSv1.2" />


0

नए Tomcats के लिए इस तरह sslProtocols और sslEnabledProtocols कॉम्बो का उपयोग करें:

<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocols="TLSv1,TLSv1.1,TLSv1.2" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" SSLEnabled="true" URIEncoding="UTF-8" keystorePass=""/>


0

सबसे पहले, जैसा कि @iviorel कहते हैं, यह नहीं है sslProtocols, यह है sslProtocol। (उसका जवाब क्यों डाउनस्कोर मिला?)


मेरे लिए JSSE , टॉमकैट 7 और जावा 7 पर, sslProtocolनिम्नलिखित विन्यास में काम नहीं करता है:

<Connector SSLEnabled="true" clientAuth="false" 
keyAlias="keyalias" keystoreFile="keystore" keystorePass="changeit" 
maxThreads="150" port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
scheme="https" secure="true" sslProtocol="TLSv1,TLSv1.1,TLSv1.2" />

इसे कहते हैं:

SEVERE: Failed to initialize end point associated with ProtocolHandler ["http-bio-443"]
java.io.IOException: TLSv1,TLSv1.1,TLSv1.2 SSLContext not available
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:465)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSocket(JSSESocketFactory.java:187)
    at org.apache.tomcat.util.net.JIoEndpoint.bind(JIoEndpoint.java:398)
    at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:646)
    ...
Caused by: java.security.NoSuchAlgorithmException: TLSv1,TLSv1.1,TLSv1.2 SSLContext not available
    at sun.security.jca.GetInstance.getInstance(GetInstance.java:159)
    at javax.net.ssl.SSLContext.getInstance(SSLContext.java:156)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.createSSLContext(JSSESocketFactory.java:478)
    at org.apache.tomcat.util.net.jsse.JSSESocketFactory.init(JSSESocketFactory.java:439)
    ... 19 more

लेकिन निम्नलिखित ठीक काम करता है:

<Connector SSLEnabled="true" clientAuth="false" 
keyAlias="keyalias" keystoreFile="keystore" keystorePass="changeit" 
maxThreads="150" port="443" protocol="org.apache.coyote.http11.Http11Protocol" 
scheme="https" secure="true" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" />

APR
SSL v3 को अक्षम करने के लिए, और TLSv1 प्रोटोकॉल को सक्षम करें:

SSLProtocol="TLSv1"

TLSv1, TLSv1.1, TLSv1.2 प्रोटोकॉल को सक्षम करने के लिए:

SSLProtocol="TLSv1+TLSv1.1+TLSv1.2"

या:

SSLProtocol="all"

नोट: "TLSv1.1", "TLSv1.2" मानों को Tomcat Native 1.1.32 और Tomcat के एक संस्करण की आवश्यकता होती है जो इसका समर्थन करता है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.