2012-01-04 18 views
5

मेरे पास 100% https वेब सर्वर है जो टीएलएस रीनेगोसिएशन करता है। यह बहुत उपयोगी है ताकि उपयोगकर्ता साइट पर आ सकें और लॉगिन बटन पर क्लिक करने से पहले कुछ अच्छे पेज प्राप्त कर सकें और अपने क्लाइंट प्रमाणपत्र के लिए पूछे जा सकें। नीचे दिए गए कोड की बात यह है कि पुनः मध्यस्थता line 213-236 of X509Cert classनेटटी https (टीएलएस) सत्र अवधि: पुनर्विचार की आवश्यकता क्यों है?

import org.jboss.netty.handler.ssl.SslHandler 

val sslh = r.underlying.context.getPipeline.get(classOf[SslHandler]) 

trySome(sslh.getEngine.getSession.getPeerCertificates.toIndexedSeq) orElse { 
    if (!fetch) None 
    else { 
    sslh.setEnableRenegotiation(true) // todo: does this have to be done on every request? 
    r match { 
     case UserAgent(agent) if needAuth(agent) => sslh.getEngine.setNeedClientAuth(true) 
     case _ => sslh.getEngine.setWantClientAuth(true) 
    } 
    val future = sslh.handshake() 
    future.await(30000) //that's certainly way too long. 
    if (future.isDone && future.isSuccess) 
     trySome(sslh.getEngine.getSession.getPeerCertificates.toIndexedSeq) 
    else 
     None 
    } 
} 

अब मैं उम्मीद कर रहा था कि एक बार किसी को एक X509 क्लाइंट प्रमाण पत्र के साथ प्रमाणित करता है सत्र थोड़ी देर पिछले और याद रखें कि प्रमाणपत्र श्रृंखला होगा करता है - कहते हैं कि 10 मिनट या अधिक, और किसी भी मामले में कम से कम 1 मिनट में। दरअसल, यही कारण है कि मेरे पास उपरोक्त विधि को परिवर्तनीय "fetch" सेट के साथ गलत पर सेट करने का विकल्प है। मुझे आशा है कि अगर किसी को कनेक्शन प्रमाणित किया गया है तो उसे फिर से बातचीत करने की आवश्यकता नहीं है।

लेकिन मैंने देखा कि अधिकांश ब्राउज़रों के साथ ऐसा लगता है कि मुझे सत्र प्राप्त करना और X509 प्रमाण पत्र वापस लौटने के लिए हर बार sslh.handshake() को कॉल करने की आवश्यकता है। यदि "fetch" को गलत पर सेट किया गया है, तो मैं अधिकतर वापस नहीं लौटाता हूं।

क्या यह सामान्य है, या क्या मैं कुछ गलत कर रहा हूं?

पी एस।

  • कोड ऊपर WebID protocol
  • इस के एक कार्यान्वयन का हिस्सा netty 3.2.5Final उपयोग कर रहा है। मैंने बिना किसी किस्मत के 3.2.7 फाइनल के साथ भी कोशिश की।
  • इसलिए मुझे current service running the above code का कोड बदलना पड़ा ताकि यह हमेशा एक हैंडशेक को मजबूर कर सके (the commit देखें) लेकिन यह मुझे उतना लचीलापन नहीं देता जितना कि मुझे उम्मीद थी।

उत्तर

संबंधित मुद्दे