Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
NettyϵÁÐÖ®Netty°²È«ÐÔ£¨¶þ£©
 
×÷Õß ÀîÁַ棬»ðÁú¹ûÈí¼þ    ·¢²¼ÓÚ 2014-09-01
  5125  次浏览      27
 

2.2. SSLË«ÏòÈÏÖ¤

2.2.1. SSLË«ÏòÈÏÖ¤¿ª·¢

ÎÒÃÇÔÚ2.1Õ½ڵĻù´¡ÉϽøÐпª·¢£¬Óëµ¥ÏòÈÏÖ¤²»Í¬µÄÊÇ·þÎñ¶ËÒ²ÐèÒª¶Ô¿Í»§¶Ë½øÐа²È«ÈÏÖ¤¡£Õâ¾ÍÒâζ×ſͻ§¶ËµÄ×ÔÇ©ÃûÖ¤ÊéÒ²ÐèÒªµ¼Èëµ½·þÎñ¶ËµÄÊý×ÖÖ¤Êé²Ö¿âÖС£

Ê×ÏÈ£¬Éú³É¿Í»§¶ËµÄ×ÔÇ©ÃûÖ¤Ê飺

keytool -export -alias smcc -keystore cChat.jks -storepass cNetty 
-file cChat.cer

×îºó£¬½«¿Í»§¶ËµÄ×ÔÇ©ÃûÖ¤Êéµ¼Èëµ½·þÎñ¶ËµÄÐÅÈÎÖ¤Êé²Ö¿âÖУº

keytool -import -trustcacerts -alias smcc -file cChat.cer -storepass 
sNetty -keystore sChat.jks

Ö¤Êéµ¼ÈëÖ®ºó£¬ÐèÒª¶ÔSSL¿Í»§¶ËºÍ·þÎñ¶ËµÄ´úÂëͬʱ½øÐÐÐ޸ģ¬Ê×ÏÈÎÒÃÇ¿´Ï·þÎñ¶ËÈçºÎÐ޸ġ£

ÓÉÓÚ·þÎñ¶ËÐèÒª¶Ô¿Í»§¶Ë½øÐÐÑéÖ¤£¬Òò´ËÔÚ³õʼ»¯·þÎñ¶ËSSLContextµÄʱºòÐèÒª¼ÓÔØÖ¤Êé²Ö¿â¡£Ê×ÏÈÐèÒª¶ÔTrustManagerFactory½øÐгõʼ»¯£¬´úÂëÈçÏ£º

³õʼ»¯SSLContextµÄʱºò¸ù¾ÝTrustManagerFactory»ñÈ¡TrustManagerÊý×飬´úÂëÈçÏ£º

×îºó£¬´´½¨SSLEngineÖ®ºó£¬ÉèÖÃÐèÒª½øÐпͻ§¶ËÈÏÖ¤£¬´úÂëÈçÏ£º

Íê³É·þÎñ¶ËÐÞ¸ÄÖ®ºó£¬ÔÙ»ØÍ·¿´Ï¿ͻ§¶ËµÄÐ޸ģ¬ÓÉÓÚ·þÎñ¶ËÐèÒªÈÏÖ¤¿Í»§¶ËµÄÖ¤Ê飬Òò´Ë£¬ÐèÒª³õʼ»¯ºÍ¼ÓÔØË½Ô¿²Ö¿â£¬Ïò·þÎñ¶Ë·¢Ë͹«Ô¿£¬³õʼ»¯KeyStoreµÄ´úÂëÈçÏ£º

³õʼ»¯SSLContextµÄʱºòÐèÒª´«ÈëKeyManagerÊý×飬´úÂëÈçÏ£º

¿Í»§¶Ë¿ª·¢Íê³ÉÖ®ºó£¬²âÊÔϳÌÐòÊÇ·ñÄܹ»Õý³£¹¤×÷£¬ÔËÐнá¹ûÈçÏÂËùʾ¡£

¿Í»§¶ËÔËÐнá¹û£º

ͼ2-5 Netty SSLË«ÏòÈÏÖ¤¿Í»§¶ËÔËÐнá¹û

·þÎñ¶ËÔËÐнá¹û£º

ͼ2-6 Netty SSLË«ÏòÈÏÖ¤·þÎñ¶ËÔËÐнá¹û

ÔÚ¿Í»§¶Ë¿ØÖÆÌ¨½øÐÐÊäÈ룬¿´SSL´«ÊäÊÇ·ñÕý³££º

ͼ2-7 Netty SSL °²È«´«Êä²âÊÔ

2.2.2. SSLË«ÏòÈÏÖ¤Ô­Àí·ÖÎö

SSLË«ÏòÈÏÖ¤Ïà±Èµ¥ÏòÈÏÖ¤£¬¶àÁËÒ»²½·þÎñ¶Ë·¢ËÍÈÏÖ¤ÇëÇóÏûÏ¢¸ø¿Í»§¶Ë£¬¿Í»§¶Ë·¢ËÍ×ÔÇ©ÃûÖ¤Ê鏸·þÎñ¶Ë½øÐа²È«ÈÏÖ¤µÄ¹ý³Ì¡£ÏÂÃæ£¬ÎÒÃǽáºÏNetty SSLµ÷²âÈÕÖ¾£¬¶ÔË«ÏòÈÏÖ¤µÄ²îÒìµã½øÐзÖÎö¡£

Ïà±ÈÓÚ¿Í»§¶Ë£¬·þÎñ¶ËÔÚ·¢ËÍServerHelloʱЯ´øÁËÒªÇó¿Í»§¶ËÈÏÖ¤µÄÇëÇóÐÅÏ¢£¬ÈçÏÂËùʾ£º

*** CertificateRequest
Cert Types: RSA, DSS, ECDSA
Cert Authorities:
<CN=localhost>
<CN=localhost>
*** ServerHelloDone

¿Í»§¶Ë½ÓÊÕµ½·þÎñ¶ËÒªÇó¿Í»§¶ËÈÏÖ¤µÄÇëÇóÏûÏ¢Ö®ºó£¬·¢ËÍ×Ô¼ºµÄÖ¤ÊéÐÅÏ¢¸ø·þÎñ¶Ë£¬ÐÅÏ¢ÈçÏ£º

matching alias: smcc
*** Certificate chain
chain [0] = [
[
Version: V3
Subject: CN=localhost
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 2048 bits
modulus: 212639695562264078962258083015763969567082142460170954053624074
53705267323050920051941696590911289892005894127848317880153980200067657563
15944918691324084822137929027919841383304228071408660098765703368443353862
47349919704780645114810932016343908989985053434023995248208445566727867691
73042913746571760169661698040844437316556983406538131853892449014877947773
16977794500345715634646402492099542466990685058179767825995777860790787074
72339147926907851214779520246763960901175126351376922481444497141021631392
59603124160944922844840171133151822882039207352509182052426500279100525773
147139994269292585983679425433429361
public exponent: 65537
Validity: [From: Sun Jul 27 08:50:35 CST 2014,
To: Mon Jul 27 08:50:35 CST 2015]
Issuer: CN=localhost
SerialNumber: [ 53d44cdb]

·þÎñ¶Ë¶Ô¿Í»§¶ËµÄ×ÔÇ©ÃûÖ¤Êé½øÐÐÈÏÖ¤£¬ÐÅÏ¢ÈçÏ£º

***
Found trusted certificate:
[
[
Version: V3
Subject: CN=localhost
Signature Algorithm: SHA1withRSA, OID = 1.2.840.113549.1.1.5

Key: Sun RSA public key, 2048 bits
modulus: 21263969556226407896225808301576396956708214246017095405362407
4537052673230509200519416965909112898920058941278483178801539802000676575
6315944918691324084822137929027919841383304228071408660098765703368443353
8624734991970478064511481093201634390898998505343402399524820844556672786
7691730429137465717601696616980408444373165569834065381318538924490148779
4777316977794500345715634646402492099542466990685058179767825995777860790
7870747233914792690785121477952024676396090117512635137692248144449714102
1631392596031241609449228448401711331518228820392073525091820524265002791
00525773147139994269292585983679425433429361
public exponent: 65537
Validity: [From: Sun Jul 27 08:50:35 CST 2014,
To: Mon Jul 27 08:50:35 CST 2015]
Issuer: CN=localhost
SerialNumber: [ 53d44cdb]

2.3. µÚÈý·½CAÈÏÖ¤

ʹÓÃjdk keytoolÉú³ÉµÄÊý×ÖÖ¤ÊéÊÇ×ÔÇ©ÃûµÄ¡£×ÔÇ©Ãû¾ÍÊÇÖ¸Ö¤ÊéÖ»Äܱ£Ö¤×Ô¼ºÊÇÍêÕûÇÒûÓо­¹ý·Ç·¨Ð޸쬵«ÊÇÎÞ·¨±£Ö¤Õâ¸öÖ¤ÊéÊÇÊôÓÚË­µÄ¡£ÎªÁ˶Ô×ÔÇ©ÃûÖ¤Êé½øÐÐÈÏÖ¤£¬ÐèҪÿ¸ö¿Í»§¶ËºÍ·þÎñ¶Ë¶¼½»»»×Ô¼º×ÔÇ©ÃûµÄ˽ÓÐÖ¤Ê飬¶ÔÓÚÒ»¸ö´óÐÍÍøÕ¾»òÕßÓ¦Ó÷þÎñÆ÷£¬ÕâÖÖ¹¤×÷Á¿ÊǷdz£´óµÄ¡£

»ùÓÚ×ÔÇ©ÃûµÄSSLË«ÏòÈÏÖ¤£¬Ö»Òª¿Í»§¶Ë»òÕß·þÎñ¶ËÐÞ¸ÄÁËÃÜÔ¿ºÍÖ¤Ê飬¾ÍÐèÒªÖØÐ½øÐÐÇ©ÃûºÍÖ¤Êé½»»»£¬ÕâÖÖµ÷ÊÔºÍά»¤¹¤×÷Á¿ÊǷdz£´óµÄ¡£Òò´Ë£¬ÔÚʵ¼ÊµÄÉÌÓÃϵͳÖÐÍùÍù»áʹÓõÚÈý·½CAÖ¤Êé°ä·¢»ú¹¹½øÐÐÇ©ÃûºÍÑéÖ¤¡£ÎÒÃǵÄä¯ÀÀÆ÷¾Í±£´æÁ˼¸¸ö³£ÓõÄCA_ROOT¡£Ã¿´ÎÁ¬½Óµ½ÍøÕ¾Ê±Ö»ÒªÕâ¸öÍøÕ¾µÄÖ¤ÊéÊǾ­¹ýÕâЩCA_ROOTÇ©Ãû¹ýµÄ¡£¾Í¿ÉÒÔͨ¹ýÑéÖ¤ÁË¡£

CAÊý×ÖÖ¤ÊéÈÏÖ¤·þÎñÍùÍùÊÇÊշѵ쬹úÄÚÓкܶàÊý×ÖÈÏÖ¤ÖÐÐͼÌṩÏà¹ØµÄ·þÎñ£¬ÈçÏÂËùʾ£º

ͼ2-8 ÉÌÒµµÄÊý×ÖÈÏÖ¤ÖÐÐÄ

×÷ΪʾÀý£¬ÎÒÃÇ×Ô¼ºÉú³ÉÒ»¸öCA_ROOTµÄÃÜÔ¿¶Ô£¬²¿ÊðÓ¦ÓÃʱ£¬°ÑÕâ¸öCA_ROOTµÄ˽Կ²¿ÊðÔÚËùÓÐÐèÒªSSL´«ÊäµÄ½Úµã¾Í¿ÉÒÔÍê³É°²È«ÈÏÖ¤¡£×÷ΪʾÀý£¬Èç¹ûÒªÉú³ÉCA_ROOT£¬ÎÒÃÇʹÓÿªÔ´µÄOpenSSL¡£

ÔÚWindowsÉϰ²×°ºÍʹÓÃOpenSSLÍøÉÏÓкܶà½Ì³Ì£¬Ò²²»ÊDZ¾ÎĵÄÖØµã£¬Òò´Ë£¬OpenSSLµÄ°²×°ºÍʹÓñ¾ÎIJ»Ïêϸ½éÉÜ¡£

ÏÂÃæÎÒÃǶԻùÓÚµÚÈý·½CAÈÏÖ¤µÄ²½Öè½øÐÐÏêϸ½éÉÜ¡£

2.3.1. ·þÎñ¶ËÖ¤ÊéÖÆ×÷

²½Öè1£ºÀûÓÃOpenSSLÉú³ÉCAÖ¤Ê飺

openssl req -new -x509 -keyout ca.key -out ca.crt -days 365

²½Öè2£ºÉú³É·þÎñ¶ËÃÜÔ¿¶Ô£º

keytool -genkey -alias securechat -keysize 2048 -validity 365 
-keyalg RSA -dname "CN=localhost" -keypass sNetty -storepass sNetty
-keystore sChat.jks

²½Öè3£ºÉú³ÉÖ¤ÊéÇ©ÃûÇëÇó£º

keytool -certreq -alias securechat -sigalg MD5withRSA -file  sChat.csr 
-keypass sNetty -storepass sNetty -keystore sChat.jks

²½Öè4£ºÓÃCA˽Կ½øÐÐÇ©Ãû£º

openssl ca -in sChat.csr -out sChat.crt -cert ca.crt -keyfile ca.key -notext

²½Öè5£ºµ¼ÈëÐÅÈεÄCA¸ùÖ¤Êéµ½keystore£º

keytool -import -v -trustcacerts -alias ca_root -file ca.crt -storepass 
sNetty -keystore sChat.jks

²½Öè6£º½«CAÇ©ÃûºóµÄserver¶ËÖ¤Êéµ¼Èëkeystore£º

keytool -import -v -alias securechat -file server.crt -keypass sNetty 
-storepass sNetty -keystore sChat.jks

2.3.2. ¿Í»§¶ËÖ¤ÊéÖÆ×÷

²½Öè1£ºÉú³É¿Í»§¶ËÃÜÔ¿¶Ô£º

keytool -genkey -alias smcc -keysize 2048 -validity 365 -keyalg 
RSA -dname "CN=localhost" -keypass cNetty -storepass cNetty -keystore cChat.jks

²½Öè2£ºÉú³ÉÖ¤ÊéÇ©ÃûÇëÇó£º

keytool -certreq -alias smcc -sigalg MD5withRSA -file  cChat.csr 
-keypass cNetty -storepass cNetty -keystore cChat.jks

²½Öè3£ºÓÃCA˽Կ½øÐÐÇ©Ãû£º

openssl ca -in cChat.csr -out cNetty.crt -cert ca.crt -keyfile ca.key -notext

²½Öè4£ºµ¼ÈëÐÅÈεÄCA¸ùÖ¤Êéµ½keystore£º

keytool -import -v -trustcacerts -alias ca_root -file ca.crt 
-storepass cNetty -keystore cChat.jks

²½Öè5£º½«CAÇ©ÃûºóµÄclient¶ËÖ¤Êéµ¼Èëkeystore£º

keytool -import -v -alias smcc -file cNetty.crt -keypass cNetty -storepass 
cNetty -keystore cChat.jks

2.3.3. ¿ª·¢ºÍ²âÊÔ

»ùÓÚCAÈÏÖ¤µÄ¿ª·¢ºÍ²âÊÔÓëSSLË«ÏòºÍµ¥ÏòÈÏÖ¤´úÂëÏàͬ£¬´Ë´¦²»ÔÙ׸Êö¡£

3. Netty SSLÔ´Âë·ÖÎö

3.1. SSL¿Í»§¶Ë

µ±¿Í»§¶ËºÍ·þÎñ¶ËµÄTCPÁ´Â·½¨Á¢³É¹¦Ö®ºó£¬SslHandlerµÄchannelActive±»´¥·¢£¬SSL¿Í»§¶Ëͨ¹ýSSLÒýÇæ·¢ÆðÎÕÊÖÇëÇóÏûÏ¢£¬´úÂëÈçÏ£º

·¢ÆðÎÕÊÖÇëÇóÖ®ºó£¬ÐèÒª½«SSLEngine´´½¨µÄÎÕÊÖÇëÇóÏûÏ¢½øÐÐSSL±àÂ룬·¢Ë͸ø·þÎñ¶Ë£¬Òò´Ë£¬ÎÕÊÖÖ®ºóÁ¢¼´µ÷ÓÃwrapNonAppData·½·¨£¬ÏÂÃæ¾ßÌå¶Ô¸Ã·½·¨½øÐзÖÎö£º

ÒòΪֻÐèÒª·¢ËÍÎÕÊÖÇëÇóÏûÏ¢£¬Òò´ËSource ByteBufΪ¿Õ£¬ÏÂÃæ¿´ÏÂwrap·½·¨µÄ¾ßÌåʵÏÖ£º

½«SSLÒýÇæÖд´½¨µÄÎÕÊÖÇëÇóÏûÏ¢±àÂ뵽Ŀ±êByteBufferÖУ¬È»ºó¶ÔдË÷Òý½øÐиüС£ÅжÏдÈë²Ù×÷ÊÇ·ñÔ½½ç£¬Èç¹ûÔ½½ç˵Ã÷outÈÝÁ¿²»×㣬ÐèÒªµ÷ÓÃensureWritable¶ÔByteBuf½øÐж¯Ì¬À©Õ¹£¬À©Õ¹Ö®ºó¼ÌÐø³¢ÊÔ±àÂë²Ù×÷¡£Èç¹û±àÂë³É¹¦£¬·µ»ØSSLÒýÇæ²Ù×÷½á¹û¡£

¶Ô±àÂë½á¹û½øÐÐÅжϣ¬Èç¹û±àÂë×Ö½ÚÊý´óÓÚ0£¬Ôò½«±àÂëºóµÄ½á¹û·¢Ë͸ø·þÎñ¶Ë£¬È»ºóÊÍ·ÅÁÙʱ±äÁ¿out¡£

ÅжÏSSLÒýÇæµÄ²Ù×÷½á¹û£¬SSLÒýÇæµÄ²Ù×÷½á¹û¶¨ÒåÈçÏ£º

1.FINISHED£ºSSLEngine ÒѾ­Íê³ÉÎÕÊÖ£»

2.NEED_TASK£ºSSLEngine ÔÚ¼ÌÐø½øÐÐÎÕÊÖǰÐèÒªÒ»¸ö£¨»ò¶à¸ö£©´úÀíÈÎÎñµÄ½á¹û£»

3.NEED_UNWRAP£ºÔÚ¼ÌÐø½øÐÐÎÕÊÖǰ£¬SSLEngine ÐèÒª´ÓÔ¶¶Ë½ÓÊÕÊý¾Ý£¬ËùÒÔÓ¦´øµ÷ÓÃSSLEngine.unwrap()£»

4.NEED_WRAP:ÔÚ¼ÌÐø½øÐÐÎÕÊÖǰ£¬SSLEngine ±ØÐëÏòÔ¶¶Ë·¢ËÍÊý¾Ý£¬ËùÒÔÓ¦¸Ãµ÷Óà SSLEngine.wrap()£»

5.NOT_HANDSHAKING:SSLEngine µ±Ç°Ã»ÓнøÐÐÎÕÊÖ¡£

ÏÂÃæÎÒÃÇ·Ö±ð¶Ô5ÖÖ²Ù×÷µÄ´úÂë½øÐзÖÎö£º

Èç¹ûÎÕÊֳɹ¦£¬ÔòÉèÖÃhandshakePromiseµÄ²Ù×÷½á¹ûΪ³É¹¦£¬Í¬Ê±·¢ËÍSslHandshakeCompletionEvent.SUCCES¸øSSL¼àÌýÆ÷£¬´úÂëÈçÏ£º

Èç¹ûÊÇNEED_TASK£¬ËµÃ÷Òì²½Ö´ÐÐSSL Task£¬Íê³ÉºóÐø¿ÉÄܺÄʱµÄ²Ù×÷»òÕßÈÎÎñ£¬Netty·â×°ÁËÒ»¸öÈÎÎñÁ¢¼´Ö´ÐÐÏ̳߳Ø×¨ÃÅ´¦ÀíSSLµÄ´úÀíÈÎÎñ£¬´úÂëÈçÏ£º

Èç¹ûÊÇNEED_UNWRAP£¬ÔòÅжÏÊÇ·ñÓÉUNWRAP·¢Æð£¬Èç¹û²»ÊÇÔòÖ´ÐÐUNWRAP²Ù×÷¡£

Èç¹ûÊÇNOT_HANDSHAKING£¬Ôòµ÷ÓÃunwrap£¬¼ÌÐø½ÓÊÕ·þÎñ¶ËµÄÏûÏ¢¡£

·þÎñ¶ËÓ¦´ðÏûÏ¢µÄ½ÓÊÕ¸ú·þÎñ¶Ë½ÓÊÕ¿Í»§¶ËµÄ´úÂëÀàËÆ£¬Î¨Ò»²»Í¬Ö®´¦ÔÚÓÚSSLÒýÇæµÄ¿Í»§¶ËģʽÉèÖò»Í¬£¬Ò»¸öÊÇ·þÎñ¶Ë£¬Ò»¸öÊǿͻ§¶Ë¡£ÉϲãµÄ´úÂë´¦ÀíÊÇÏàͬµÄ£¬ÏÂÃæÎÒÃÇÔÚSSL·þÎñ¶ËÕ½ڷÖÎöÎÕÊÖÏûÏ¢µÄ½ÓÊÕ¡£

3.2. SSL·þÎñ¶Ë

SSL·þÎñ¶Ë½ÓÊÕ¿Í»§¶ËÎÕÊÖÇëÇóÏûÏ¢µÄÈë¿Ú·½·¨ÊÇdecode·½·¨£¬ÏÂÃæ¶ÔËü½øÐÐÏêϸ·ÖÎö¡£

Ê×ÏÈ»ñÈ¡½ÓÊÕ»º³åÇøµÄ¶ÁдË÷Òý£¬²¢¶Ô¶ÁÈ¡µÄÆ«ÒÆÁ¿Ö¸Õë½øÐб¸·Ý£º

¶Ô°ë°ü±êʶ½øÐÐÅжϣ¬Èç¹ûÉÏÒ»¸öÏûÏ¢Êǰë°üÏûÏ¢£¬ÔòÅжϵ±Ç°¿É¶ÁµÄ×Ö½ÚÊýÊÇ·ñСÓÚÕû°üÏûÏ¢µÄ³¤¶È£¬Èç¹ûСÓÚÕû°ü³¤¶È£¬Ôò˵Ã÷±¾´Î¶ÁÈ¡²Ù×÷ÈÔȻûÓаÑSSLÕû°üÏûÏ¢¶ÁÈ¡ÍêÕû£¬ÐèÒª·µ»ØIOÏ̼߳ÌÐø¶ÁÈ¡£¬´úÂëÈçÏ£º

Èç¹ûÏûÏ¢¶ÁÈ¡ÍêÕû£¬ÔòÐÞ¸ÄÆ«ÒÆÁ¿£ºÍ¬Ê±ÖÃλ°ë°ü³¤¶È±êʶ¡£

ÏÂÃæÔÚforÑ­»·ÖжÁÈ¡SSLÏûÏ¢£¬ÒòΪTCP´æÔÚ²ð°üºÍÕ³°ü£¬Òò´ËÒ»¸öByteBuf¿ÉÄܰüº¬¶àÌõÍêÕûµÄSSLÏûÏ¢¡£

Ê×ÏÈÅжϿɶÁµÄ×Ö½ÚÊýÊÇ·ñСÓÚЭÒéÏûϢͷ³¤¶È£¬Èç¹ûÊÇÔòÍ˳öÑ­»·¼ÌÐøÓÉIOÏ߳̽ÓÊÕºóÐøµÄ±¨ÎÄ£º

»ñÈ¡SSLÏûÏ¢°üµÄ±¨Îij¤¶È£¬¾ßÌåËã·¨²»ÔÙ½éÉÜ£¬¿ÉÒԲο¼SSLµÄ¹æ·¶Îĵµ½øÐнâ¶Á£¬´úÂëÈçÏ£º

¶Ô³¤¶È½øÐÐÅжϣ¬Èç¹ûSSL±¨Îij¤¶È´óÓڿɶÁµÄ×Ö½ÚÊý£¬ËµÃ÷ÊǸö°ë°üÏûÏ¢£¬½«°ë°ü±êʶ³¤¶ÈÖÃ룬·µ»ØIOÏ̼߳ÌÐø¶ÁÈ¡ºóÐøµÄÊý¾Ý±¨£¬´úÂëÈçÏ£º

¶ÔÏûÏ¢½øÐнâÂ룬½«SSL¼ÓÃܵÄÏûÏ¢½âÂëΪ¼ÓÃÜǰµÄԭʼÊý¾Ý£¬unwrap·½·¨ÈçÏ£º

µ÷ÓÃSSLEngineµÄunwrap·½·¨¶ÔSSLԭʼÏûÏ¢½øÐнâÂ룬¶Ô½âÂë½á¹û½øÐÐÅжϣ¬Èç¹ûÔ½½ç£¬ËµÃ÷out»º³åÇø²»¹»£¬ÐèÒª½øÐж¯Ì¬À©Õ¹¡£Èç¹ûÊÇÊ×´ÎÔ½½ç£¬ÎªÁ˾¡Á¿½ÚÔ¼Äڴ棬ʹÓÃSSL×î´ó»º³åÇø³¤¶ÈºÍSSLԭʼ»º³åÇø¿É¶ÁµÄ×Ö½ÚÊýÖнÏСµÄ¡£Èç¹ûÔٴη¢Éú»º³åÇøÔ½½ç£¬ËµÃ÷À©ÕźóµÄ»º³åÇøÈÔÈ»²»¹»Óã¬Ö±½ÓʹÓÃSSL»º³åÇøµÄ×î´ó³¤¶È£¬±£Ö¤Ï´νâÂë³É¹¦¡£

½âÂë³É¹¦Ö®ºó£¬¶ÔSSLÒýÇæµÄ²Ù×÷½á¹û½øÐÐÅжϣºÈç¹ûÐèÒª¼ÌÐø½ÓÊÕÊý¾Ý£¬Ôò¼ÌÐøÖ´ÐнâÂë²Ù×÷£»Èç¹ûÐèÒª·¢ËÍÎÕÊÖÏûÏ¢£¬Ôòµ÷ÓÃwrapNonAppData·¢ËÍÎÕÊÖÏûÏ¢£»Èç¹ûÐèÒªÒì²½Ö´ÐÐSSL´úÀíÈÎÎñ£¬Ôòµ÷ÓÃÁ¢¼´Ö´ÐÐÏ̳߳ØÖ´ÐдúÀíÈÎÎñ£»Èç¹ûÊÇÎÕÊֳɹ¦£¬ÔòÉèÖÃSSL²Ù×÷½á¹û£¬·¢ËÍSSLÎÕÊֳɹ¦Ê¼þ£»Èç¹ûÊÇ

Ó¦ÓòãµÄÒµÎñÊý¾Ý£¬Ôò¼ÌÐøÖ´ÐнâÂë²Ù×÷£¬ÆäËü²Ù×÷½á¹û£¬Å׳ö²Ù×÷ÀàÐÍÒì³£¡£

ÐèÒªÖ¸³öµÄÊÇ£¬SSL¿Í»§¶ËºÍ·þÎñ¶Ë½ÓÊÕ¶Ô·½SSLÎÕÊÖÏûÏ¢µÄ´úÂëÊÇÏàͬµÄ£¬ÄÇΪʲôSSL·þÎñ¶ËºÍ¿Í»§¶Ë·¢Ë͵ÄÎÕÊÖÏûÏ¢²»Í¬ÄØ£¿ÕâЩÊÇSSLÒýÇæ¸ºÔðÇø·ÖºÍ´¦ÀíµÄ£¬ÎÒÃÇÔÚ´´½¨SSLÒýÇæµÄʱºòÉèÖÃÁ˿ͻ§¶Ëģʽ£¬SSLÒýÇæ¾ÍÊǸù¾ÝÕâ¸öÀ´½øÐÐÇø·ÖµÄ£¬´úÂëÈçÏ£º

ÎÞÂÛ¿Í»§¶Ë»¹ÊÇ·þÎñ¶Ë£¬Ö»ÐèÒªÎ§ÈÆSSLÒýÇæµÄ²Ù×÷½á¹û½øÐбà³Ì¼´¿É¡£

3.3. SSLÏûÏ¢¶ÁÈ¡

SSLµÄÏûÏ¢¶Áȡʵ¼Ê¾ÍÊÇByteToMessageDecoder½«½ÓÊÕµ½µÄSSL¼ÓÃܺóµÄ±¨ÎĽâÂëΪԭʼ±¨ÎÄ£¬È»ºó½«Õû°üÏûϢͶµÝ¸øºóÐøµÄÏûÏ¢½âÂëÆ÷£¬¶ÔÏûÏ¢×ö¶þ´Î½âÂë¡£»ùÓÚSSLµÄÏûÏ¢½âÂëÄ£ÐÍÈçÏ£º

SSLÏûÏ¢¶ÁÈ¡µÄÈë¿Ú¶¼ÊÇdecode£¬ÒòΪÊÇ·ÇÎÕÊÖÏûÏ¢£¬ËüµÄ´¦Àí·Ç³£¼òµ¥£¬¾ÍÊÇÑ­»·µ÷ÓÃÒýÇæµÄunwrap·½·¨£¬½«SSL±¨ÎĽâÂëΪԭʼµÄ±¨ÎÄ£¬´úÂëÈçÏ£º

ÎÕÊֳɹ¦Ö®ºóµÄËùÓÐÏûÏ¢¶¼ÊÇÓ¦ÓÃÊý¾Ý£¬Òò´ËËüµÄ²Ù×÷½á¹ûΪNOT_HANDSHAKING£¬Óöµ½´Ë±êʶ֮ºó¼ÌÐø¶ÁÈ¡ÏûÏ¢£¬Ö±µ½Ã»ÓпɶÁµÄ×Ö½Ú£¬Í˳öÑ­»·£¬´úÂëÈçÏ£º

Èç¹û¶ÁÈ¡µ½ÁË¿ÉÓõÄ×Ö½Ú£¬Ôò½«¶ÁÈ¡µ½µÄ»º³åÇø¼Óµ½Êä³ö½á¹ûÁбíÖУ¬´úÂëÈçÏ£º

ByteToMessageDecoderÅжϽâÂë½á¹ûList£¬Èç¹û·Ç¿Õ£¬ÔòÑ­»·µ÷ÓúóÐøµÄHandler£¬ÓɺóÐøµÄ½âÂëÆ÷¶Ô½âÃܺóµÄ±¨ÎĽøÐжþ´Î½âÂë¡£

3.4. SSLÏûÏ¢·¢ËÍ

SSLÏûÏ¢·¢ËÍʱ£¬ÓÉSslHandler¶ÔÏûÏ¢½øÐбàÂ룬±àÂëºóµÄÏûϢʵ¼Ê¾ÍÊÇSSL¼ÓÃܺóµÄÏûÏ¢£¬ËüµÄÈë¿ÚÊÇflush·½·¨£¬´úÂëÈçÏ£º

´Ó´ý¼ÓÃܵÄÏûÏ¢¶ÓÁÐÖе¯³öÏûÏ¢£¬µ÷ÓÃSSLÒýÇæµÄwrap·½·¨½øÐбàÂ룬´úÂëÈçÏ£º

wrap·½·¨ºÜ¼òµ¥£¬¾ÍÊǵ÷ÓÃSSLÒýÇæµÄ±àÂë·½·¨£¬È»ºó¶ÔдË÷Òý½øÐÐÐ޸ģ¬Èç¹û»º³åÇøÔ½½ç£¬Ôò¶¯Ì¬À©Õ¹»º³åÇø£º

¶ÔSSL²Ù×÷½á¹û½øÐÐÅжϣ¬ÒòΪÒѾ­ÎÕÊֳɹ¦£¬Òò´Ë·µ»ØµÄ½á¹ûÊÇNOT_HANDSHAKING£¬Ö´ÐÐfinishWrap·½·¨£¬µ÷ÓÃChannelHandlerContextµÄwrite·½·¨£¬½«ÏûϢдÈë·¢ËÍ»º³åÇøÖУ¬Èç¹û´ý·¢Ë͵ÄÏûϢΪ¿Õ£¬Ôò¹¹Ôì¿ÕµÄByteBufдÈ룺

±àÂëºó£¬µ÷ÓÃChannelHandlerContextµÄflush·½·¨ÏûÏ¢·¢Ë͸ø¶Ô·½£¬´úÂëÈçÏ£º

ctx.flush();
   
5125 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕÂ

Java΢·þÎñÐÂÉú´úÖ®Nacos
ÉîÈëÀí½âJavaÖеÄÈÝÆ÷
JavaÈÝÆ÷Ïê½â
Java´úÂëÖÊÁ¿¼ì²é¹¤¾ß¼°Ê¹Óð¸Àý
Ïà¹ØÎĵµ

JavaÐÔÄÜÓÅ»¯
Spring¿ò¼Ü
SSM¿ò¼Ü¼òµ¥¼òÉÜ
´ÓÁ㿪ʼѧjava±à³Ì¾­µä
Ïà¹Ø¿Î³Ì

¸ßÐÔÄÜJava±à³ÌÓëϵͳÐÔÄÜÓÅ»¯
JavaEE¼Ü¹¹¡¢ Éè¼ÆÄ£Ê½¼°ÐÔÄܵ÷ÓÅ
Java±à³Ì»ù´¡µ½Ó¦Óÿª·¢
JAVAÐéÄâ»úÔ­ÀíÆÊÎö
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

Java ÖеÄÖÐÎıàÂëÎÊÌâ
Java»ù´¡ÖªÊ¶µÄÈýÊ®¸ö¾­µäÎÊ´ð
Íæ×ª Java Web Ó¦Óÿª·¢
ʹÓÃSpring¸üºÃµØ´¦ÀíStruts
ÓÃEclipse¿ª·¢iPhone WebÓ¦ÓÃ
²å¼þϵͳ¿ò¼Ü·ÖÎö


Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ


Struts+Spring+Hibernate/EJB+ÐÔÄÜÓÅ»¯
»ªÏÄ»ù½ð ActiveMQ Ô­ÀíÓë¹ÜÀí
ijÃñº½¹«Ë¾ Java»ù´¡±à³Ìµ½Ó¦Óÿª·¢
ij·çµç¹«Ë¾ Java Ó¦Óÿª·¢Æ½Ì¨ÓëÇ¨ÒÆ
ÈÕÕÕ¸Û J2EEÓ¦Óÿª·¢¼¼Êõ¿ò¼ÜÓëʵ¼ù
ij¿ç¹ú¹«Ë¾ ¹¤×÷Á÷¹ÜÀíJBPM
¶«·½º½¿Õ¹«Ë¾ ¸ß¼¶J2EE¼°ÆäÇ°ÑØ¼¼Êõ