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

1Ôª 10Ôª 50Ôª





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



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

1. ±³¾°

1.1. ÑϾþµÄ°²È«ÐÎÊÆ

1.1.1. OpenSSL Heart bleed©¶´

2014ÄêÉϰëÄê¶ÔÍøÂ簲ȫӰÏì×î´óµÄÎÊÌâ¾ÍÊÇOpenSSL Heart bleed©¶´£¬À´×ÔCodenomiconºÍ¹È¸è°²È«²¿ÃŵÄÑо¿ÈËÔ±·¢ÏÖOpenSSLµÄÔ´´úÂëÖдæÔÚÒ»¸ö©¶´£¬¿ÉÒÔÈù¥»÷Õß»ñµÃ·þÎñÆ÷ÉÏ64KÄÚ´æÖеÄÊý¾ÝÄÚÈÝ¡£¸Ã©¶´ÔÚ¹úÄÚ±»ÒëΪ¡± OpenSSLÐÄÔà³öѪ©¶´¡±£¬ÒòÆäÆÆ»µÐÔÖ®´óºÍÓ°ÏìµÄ·¶Î§Ö®¹ã£¬¿°³ÆÍøÂ簲ȫÀï³Ì±®Ê¼þ¡£

OpenSSLÊÇÎªÍøÂçͨÐÅÌṩ°²È«¼°Êý¾ÝÍêÕûÐÔµÄÒ»ÖÖ°²È«Ð­Ò飬ÄÒÀ¨ÁËÖ÷ÒªµÄÃÜÂëËã·¨¡¢³£ÓõÄÃÜÔ¿ºÍÖ¤Êé·â×°¹ÜÀí¹¦ÄÜÒÔ¼°SSLЭÒ飮¶àÊýSSL¼ÓÃÜÍøÕ¾ÊÇÓÃÃûΪOpenSSLµÄ¿ªÔ´Èí¼þ°ü£¬ÓÉÓÚÕâÒ²ÊÇ»¥ÁªÍøÓ¦ÓÃ×î¹ã·ºµÄ°²È«´«Êä·½·¨£¬±»ÍøÒø¡¢ÔÚÏßÖ§¸¶¡¢µçÉÌÍøÕ¾¡¢ÃÅ»§ÍøÕ¾¡¢µç×ÓÓʼþµÈÖØÒªÍøÕ¾¹ã·ºÊ¹Óã¬ËùÒÔ©¶´Ó°Ï췶Χ¹ã´ó¡£

È«ÇòµÚÒ»¸ö±»¹¥»÷ͨ¸æµÄ°¸ÀýÊǼÓÄôó˰Îñ¾ÖÈ·ÈÏOpenSSL Heart bleed©¶´µ¼ÖÂÁË900¸öÄÉ˰È˵ÄÉç»á±£ÕϺű»µÁ£¬Õâ900¸öÄÉ˰È˵ÄÉç±£ºÅ±»¹¥»÷ÕßÔÚϵͳÖÐÍêȫɾ³ýÁË¡£

ÈκÎÍøÂç¹¥»÷¶¼Äܹ»¸øÆóÒµÔì³ÉÆÆ»µ£¬µ«ÊÇÈçºÎ½«ÕâÐ©ÆÆ»µ¾ßÌåÁ¿»¯³É½ðÈÚÊý¾ÝÄØ£¿2013Ä꣬B2B InternationalÁªºÏ¿¨°Í˹»ùʵÑéÊÒ»ùÓÚ¶ÔÈ«ÇòÆóÒµµÄµ÷²é½á¹û£¬¼ÆËã³öÍøÂç¹¥»÷ƽ¾ùÔì³ÉµÄËðʧ¡£

¸ù¾Ýµ÷²é±¨¸æµÃ³öµÄ½áÂÛ£¬µ±ÆóÒµÔâÓöÍøÂç¹¥»÷ºóƽ¾ùËðʧΪ649,000ÃÀÔª¡£ËðʧÖ÷Òª°üÀ¨Á½·½Ã棺

1.°²È«Ê¼þ±¾ÉíÔì³ÉµÄËðʧ£¬¼´ÓÉÖØÒªÊý¾Ýй©¡¢ÒµÎñÁ¬ÐøÐÔÒÔ¼°°²È«ÐÞ¸´×¨¼Ò·ÑÓÃÏà¹Ø³É±¾£»

2.ΪÁÐÈë¼Æ»®µÄ¡±ÏìÓ¦¡±³É±¾£¬ÓÃÓÚ×èֹδÀ´·¢ÉúÀàËÆµÄ¹¥»÷ʼþ£¬°üÀ¨¹ÍÓ¶¡¢ÅàѵԱ¹¤³É±¾ÒÔ¼°Ó²¼þ¡¢Èí¼þºÍÆäËü»ù´¡ÉèÊ©°²È«Éý¼¶³É±¾¡£

1.2. NettyÃæÁٵݲȫ·çÏÕ

×÷Ϊһ¸ö¸ßÐÔÄܵÄNIOͨÐÅ¿ò¼Ü£¬»ùÓÚNettyµÄÐÐÒµÓ¦Ó÷dz£¹ã·º£¬²»Í¬µÄÐÐÒµ¡¢²»Í¬µÄÓ¦Óó¡¾°£¬ÃæÁٵݲȫÌôÕ½Ò²²»Í¬£¬ÏÂÃæÎÒÃǸù¾ÝNettyµÄµäÐÍÓ¦Óó¡¾°£¬·ÖÎöÏÂNettyÃæÁٵݲȫÌôÕ½¡£

1.2.1. ½öÏÞÄÚ²¿Ê¹ÓõÄRPCͨÐÅ¿ò¼Ü

Ëæ×ÅÒµÎñµÄ·¢Õ¹£¬ÍøÕ¾¹æÄ£µÄÀ©´ó£¬´«Í³»ùÓÚMVCµÄ´¹Ö±¼Ü¹¹ÒѾ­ÎÞ·¨Ó¦¶ÔÒµÎñµÄ¿ìËÙ·¢Õ¹¡£ÐèÒª¶ÔÊý¾ÝºÍÒµÎñ½øÐÐˮƽ²ð·Ö£¬»ùÓÚRPCµÄ·Ö²¼Ê½·þÎñ¿ò¼Ü³ÉΪ×î¼ÑÑ¡Ôñ¡£

ÒµÎñˮƽ²ð·ÖÖ®ºó£¬ÄÚ²¿µÄ¸÷¸öÄ£¿éÐèÒª½øÐиßÐÔÄܵÄͨÐÅ£¬´«Í³»ùÓÚRMIºÍHessionµÄͬ²½×èÈûʽͨÐÅÒѾ­ÎÞ·¨Âú×ãÐÔÄܺͿɿ¿ÐÔÒªÇó¡£Òò´Ë£¬¸ßÐÔÄܵÄNIO¿ò¼Ü³ÉΪ¹¹½¨·Ö²¼Ê½·þÎñ¿ò¼ÜµÄ»ùʯ¡£

ÍøÕ¾µÄ¼Ü¹¹Ñݽø¹ý³ÌÈçÏ£º

ͼ1-1 ÍøÕ¾µÄ¼Ü¹¹Ñݽø

¸ßÐÔÄܵÄRPC¿ò¼Ü£¬¸÷Ä£¿éÖ®¼äÍùÍù²ÉÓó¤Á¬½ÓͨÐÅ£¬Í¨¹ýÐÄÌø¼ì²â±£Ö¤Á´Â·µÄ¿É¿¿ÐÔ¡£ÓÉÓÚRPC¿ò¼Üͨ³£ÊÇÔÚÄÚ²¿¸÷Ä£¿éÖ®¼äʹÓã¬ÔËÐÐÔÚÊÚÐŵÄÄÚ²¿°²È«ÓòÖУ¬²»Ö±½Ó¶ÔÍ⿪·Å½Ó¿Ú¡£Òò´Ë£¬²»ÐèÒª×öÎÕÊÖ¡¢ºÚ°×Ãûµ¥¡¢SSL/TLSµÈ£¬ÕýËùνÊÇ¡°·À¾ý×Ó²»·ÀСÈË¡±¡£

ÔÚÕâÖÖÓ¦Óó¡¾°Ï£¬NettyµÄ°²È«ÐÔÊÇÒÀÍÐÆóÒµµÄ·À»ðǽ¡¢°²È«¼Ó¹Ì²Ù×÷ϵͳµÈϵͳ¼¶°²È«À´±£Õϵģ¬Ëü×ÔÉí²¢²»ÐèÒªÔÙ×ö¶îÍâµÄ°²È«ÐÔ±£»¤¹¤×÷¡£

1.2.2. ¶ÔµÚÈý·½¿ª·ÅµÄͨÐÅ¿ò¼Ü

Èç¹ûʹÓÃNetty×öRPC¿ò¼Ü»òÕß˽ÓÐЭÒéÕ»£¬RPC¿ò¼ÜÃæÏò·ÇÊÚÐŵĵÚÈý·½¿ª·Å£¬ÀýÈ罫ÄÚ²¿µÄһЩÄÜÁ¦Í¨¹ý·þÎñ¶ÔÍ⿪·Å³öÈ¥£¬´Ëʱ¾ÍÐèÒª½øÐа²È«ÈÏÖ¤£¬Èç¹û¿ª·ÅµÄÊǹ«ÍøIP£¬¶ÔÓÚ°²È«ÐÔÒªÇó·Ç³£¸ßµÄһЩ·þÎñ£¬ÀýÈçÔÚÏßÖ§¸¶¡¢¶©¹ºµÈ£¬ÐèҪͨ¹ýSSL/TLS½øÐÐͨÐÅ¡£

ËüµÄÔ­ÀíͼÈçÏ£º

ͼ1-2 ¶ÔµÚÈý·½¿ª·ÅµÄͨÐÅ¿ò¼Ü

¶ÔµÚÈý·½¿ª·ÅµÄͨÐÅ¿ò¼ÜµÄ½Ó¿Úµ÷ÓôæÔÚÈýÖÖ³¡¾°£º

ÔÚÆóÒµÄÚÍø£¬¿ª·Å¸øÄÚ²¿ÆäËüÄ£¿éµ÷ÓõķþÎñ£¬Í¨³£²»ÐèÒª½øÐа²È«ÈÏÖ¤ºÍSSL/TLS´«Ê䣻
ÔÚÆóÒµÄÚÍø£¬±»ÍⲿÆäËüÄ£¿éµ÷ÓõķþÎñ£¬ÍùÍùÐèÒªÀûÓÃIPºÚ°×Ãûµ¥¡¢ÎÕÊֵǽµÈ·½Ê½½øÐа²È«ÈÏÖ¤£¬ÈÏ֤ͨ¹ýÖ®ºóË«·½Ê¹ÓÃÆÕͨµÄSocket½øÐÐͨÐÅ£¬Èç¹ûÈÏ֤ʧ°Ü£¬Ôò¾Ü¾ø¿Í»§¶ËÁ¬½Ó£»

¿ª·Å¸øÆóÒµÍⲿµÚÈý·½Ó¦Ó÷ÃÎʵķþÎñ£¬ÍùÍùÐèÒª¼àÌý¹«ÍøIP£¨Í¨³£ÊÇ·À»ðǽµÄIPµØÖ·£©£¬ÓÉÓÚ¶ÔµÚÈý·½·þÎñµ÷ÓÃÕߵļà¹Ü´æÔÚÖî¶àÀ§ÄÑ£¬»òÕßÎÞ·¨ÓÐЧ¼à¹Ü£¬ÕâЩµÚÈý·½Ó¦ÓÃʵ¼ÊÊÇ·ÇÊÚÐŵġ£ÎªÁËÓÐЧӦ¶Ô°²È«·çÏÕ£¬¶ÔÓÚÃô¸ÐµÄ·þÎñÍùÍùÐèҪͨ¹ýSSL/TLS½øÐа²È«´«Êä¡£

1.2.3. Ó¦ÓòãЭÒéµÄ°²È«ÐÔ

×÷Ϊ¸ßÐÔÄÜ¡¢Ò첽ʼþÇý¶¯µÄNIO¿ò¼Ü£¬Netty·Ç³£ÊʺϹ¹½¨ÉϲãµÄÓ¦ÓòãЭÒ飬Ïà¹ØÔ­Àí£¬ÈçÏÂͼËùʾ£º

ͼ1-3 »ùÓÚNetty¹¹½¨Ó¦ÓòãЭÒé

ÓÉÓÚ¾ø´ó¶àÊýÓ¦ÓòãЭÒé¶¼Êǹ«Óеģ¬ÕâÒâζ×ŵײãµÄNettyÐèÒªÏòÉϲãÌṩͨÐŲãµÄ°²È«´«Ê䣬Ҳ¾ÍÊÇÐèÒªÖ§³ÖSSL/TLS¡£

JDKµÄ°²È«Àà¿âÌṩÁËjavax.net.ssl.SSLSocketºÍjavax.net.ssl.SSLServerSocketÀà¿âÓÃÓÚÖ§³ÖSSL/TLS°²È«´«Ê䣬¶ÔÓÚNIO·Ç×èÈûSocketͨÐÅ£¬JDK²¢Ã»ÓÐÌṩÏֳɿÉÓõÄÀà¿â¼ò»¯Óû§¿ª·¢¡£

Nettyͨ¹ýJDKµÄSSLEngine£¬ÒÔSslHandlerµÄ·½Ê½Ìṩ¶ÔSSL/TLS°²È«´«ÊäµÄÖ§³Ö£¬¼«´óµÄ¼ò»¯ÁËÓû§µÄ¿ª·¢¹¤×÷Á¿£¬½µµÍ¿ª·¢ÄѶȡ£

¶ÔÓÚNettyĬÈÏÌṩµÄHTTPЭÒ飬NettyÀûÓÃSslHandler£¬Í¬ÑùÖ§³ÖHTTPSЭÒé¡£

2. Netty SSL¿ª·¢

2.1. SSLµ¥ÏòÈÏÖ¤

µ¥ÏòÈÏÖ¤£¬¼´¿Í»§¶ËÖ»ÑéÖ¤·þÎñ¶ËµÄºÏ·¨ÐÔ£¬·þÎñ¶Ë²»ÑéÖ¤¿Í»§¶Ë¡£ÏÂÃæÎÒÃÇͨ¹ýNettyµÄSSLµ¥ÏòÈÏÖ¤´úÂ뿪·¢À´ÕÆÎÕ»ùÓÚNettyµÄSSLµ¥ÏòÈÏÖ¤¡£

2.1.1. SSLµ¥ÏòÈÏÖ¤¿ª·¢

Ê×ÏÈ£¬ÀûÓÃJDKµÄkeytool¹¤¾ß£¬Netty·þÎñ¶ËÒÀ´ÎÉú³É·þÎñ¶ËµÄÃÜÔ¿¶ÔºÍÖ¤Êé²Ö¿â¡¢·þÎñ¶Ë×ÔÇ©ÃûÖ¤Êé¡£

Éú³ÉNetty·þÎñ¶Ë˽ԿºÍÖ¤Êé²Ö¿âÃüÁ

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

Éú³ÉNetty·þÎñ¶Ë×ÔÇ©ÃûÖ¤Ê飺

keytool -export -alias securechat -keystore sChat.jks -storepass sNetty -file sChat.cer

Éú³É¿Í»§¶ËµÄÃÜÔ¿¶ÔºÍÖ¤Êé²Ö¿â£¬ÓÃÓÚ½«·þÎñ¶ËµÄÖ¤Êé±£´æµ½¿Í»§¶ËµÄÊÚÐÅÖ¤Êé²Ö¿âÖУ¬ÃüÁîÈçÏ£º

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

Ëæºó£¬½«Netty·þÎñ¶ËµÄÖ¤Êéµ¼Èëµ½¿Í»§¶ËµÄÖ¤Êé²Ö¿âÖУ¬ÃüÁîÈçÏ£º

keytool -import -trustcacerts -alias securechat -filesChat.cer -storepass cNetty -keystore cChat.jks

ÉÏÊö¹¤×÷Íê³ÉÖ®ºó£¬ÎÒÃǾͿªÊ¼±àдSSL·þÎñ¶ËºÍ¿Í»§¶ËµÄ´úÂ룬ÏÂÃæÎÒÃǶԺËÐÄ´úÂë½øÐн²½â¡£

Ê×ÏÈ¿´·þÎñ¶ËµÄ´úÂ룬ÔÚTCPÁ´Â·³õʼ»¯µÄʱºò£¬´´½¨SSLContext²¢¶ÔÆä½øÐÐÕýÈ·µÄ³õʼ»¯£¬ÏÂÃæÎÒÃǶÔSSLContextµÄ´´½¨½øÐн²½â£º

ÒòΪÊǿͻ§¶ËÈÏÖ¤·þÎñ¶Ë£¬Òò´Ë·þÎñ¶ËÐèÒªÕýÈ·µÄÉèÖúͼÓÔØË½Ô¿²Ö¿âKeyStore£¬Ïà¹Ø´úÂëÈçÏ£º

³õʼ»¯KeyManagerFactoryÖ®ºó£¬´´½¨SSLContext²¢³õʼ»¯£¬´úÂëÈçÏ£º

ÓÉÓÚÊǵ¥ÏòÈÏÖ¤£¬·þÎñ¶Ë²»ÐèÒªÑéÖ¤¿Í»§¶ËµÄºÏ·¨ÐÔ£¬Òò´Ë£¬TrustManagerΪ¿Õ£¬°²È«Ëæ»úÊý²»ÐèÒªÉèÖã¬Ê¹ÓÃJDKĬÈÏ´´½¨µÄ¼´¿É¡£

·þÎñ¶ËµÄSSLContext´´½¨Íê³ÉÖ®ºó£¬ÀûÓÃSSLContext´´½¨SSLÒýÇæSSLEngine£¬ÉèÖÃSSLEngineΪ·þÎñ¶Ëģʽ£¬ÓÉÓÚ²»ÐèÒª¶Ô¿Í»§¶Ë½øÐÐÈÏÖ¤£¬Òò´ËNeedClientAuth²»ÐèÒª¶îÍâÉèÖã¬Ê¹ÓÃĬÈÏÖµFalse¡£Ïà¹Ø´úÂëÈçÏ£º

engine.setuseclientMode£¨false£©;

SSL·þÎñ¶Ë´´½¨Íê³ÉÖ®ºó£¬ÏÂÃæ¼ÌÐø¿´¿Í»§¶ËµÄ´´½¨£¬ËüµÄÔ­Àíͬ·þÎñ¶ËÀàËÆ£¬Ò²ÊÇÔÚ³õʼ»¯TCPÁ´Â·µÄʱºò´´½¨²¢ÉèÖÃSSLEngine£¬´úÂëÈçÏ£º

ÓÉÓÚÊǿͻ§¶ËÈÏÖ¤·þÎñ¶Ë£¬Òò´Ë£¬¿Í»§¶ËÖ»ÐèÒª¼ÓÔØ´æ·Å·þÎñ¶ËCAµÄÖ¤Êé²Ö¿â¼´¿É¡£

¼ÓÔØÖ¤Êé²Ö¿âÍê³ÉÖ®ºó£¬³õʼ»¯SSLContext£¬´úÂëÈçÏ£º¶ÔÓÚ¿Í»§¶ËÖ»ÐèÒªÉèÖÃÐÅÈÎÖ¤ÊéTrustManager¡£

¿Í»§¶ËSSLContext³õʼ»¯Íê³ÉÖ®ºó£¬´´½¨SSLEngine²¢½«ÆäÉèÖÃΪ¿Í»§¶Ë¹¤×÷ģʽ£¬´úÂëÈçÏ£º

½«SslHandlerÌí¼Óµ½pipelineÖУ¬ÀûÓÃSslHandlerʵÏÖSocket°²È«´«Ê䣬´úÂëÈçÏ£º

¿Í»§¶ËºÍ·þÎñ¶Ë´´½¨Íê³ÉÖ®ºó£¬²âÊÔÏÂSSLµ¥ÏòÈÏÖ¤¹¦ÄÜÊÇ·ñOK£¬ÎªÁ˲鿴SSLÎÕÊÖ¹ý³Ì£¬ÎÒÃÇ´ò¿ªSSLÎÕÊֵĵ÷²âÈÕÖ¾£¬EclipseÉèÖÃÈçÏ£º

ͼ2-1 ´ò¿ªSSLµ÷²âÈÕÖ¾

·Ö±ðÔËÐзþÎñ¶ËºÍ¿Í»§¶Ë£¬ÔËÐнá¹ûÈçÏ£º

ͼ2-2 ¿Í»§¶ËSSLÎÕÊÖÈÕÖ¾

ͼ2-3 ·þÎñ¶ËSSLÎÕÊÖÈÕÖ¾

ÔÚ¿Í»§¶ËÊäÈëÐÅÏ¢£¬·þÎñ¶ËÔ­Ñù·µ»Ø£¬²âÊÔ½á¹ûÈçÏ£º

µ½´Ë£¬Netty SSLµ¥ÏòÈÏÖ¤ÒѾ­¿ª·¢Íê³É£¬Ï¸öС½ÚÎÒÃǽ«½áºÏSSLÎÕÊÖÈÕÖ¾£¬Ïêϸ½â¶ÁÏÂSSLµ¥ÏòÈÏÖ¤µÄÔ­Àí¡£

2.1.2. SSLµ¥ÏòÈÏÖ¤Ô­Àí·ÖÎö

SSLµ¥ÏòÈÏÖ¤µÄ¹ý³Ì×ܽáÈçÏ£º

1.SSL¿Í»§¶ËÏò·þÎñ¶Ë´«ËͿͻ§¶ËSSLЭÒéµÄ°æ±¾ºÅ¡¢Ö§³ÖµÄ¼ÓÃÜËã·¨ÖÖÀà¡¢²úÉúµÄËæ»úÊý£¬ÒÔ¼°ÆäËü¿ÉÑ¡ÐÅÏ¢£»

2.·þÎñ¶Ë·µ»ØÎÕÊÖÓ¦´ð£¬Ïò¿Í»§¶Ë´«ËÍÈ·ÈÏSSLЭÒéµÄ°æ±¾ºÅ¡¢¼ÓÃÜËã·¨µÄÖÖÀà¡¢Ëæ»úÊýÒÔ¼°ÆäËüÏà¹ØÐÅÏ¢£»

3.·þÎñ¶ËÏò¿Í»§¶Ë·¢ËÍ×Ô¼ºµÄ¹«Ô¿£»

4.¿Í»§¶Ë¶Ô·þÎñ¶ËµÄÖ¤Êé½øÐÐÈÏÖ¤£¬·þÎñ¶ËµÄºÏ·¨ÐÔУÑé°üÀ¨£ºÖ¤ÊéÊÇ·ñ¹ýÆÚ¡¢·¢ÐзþÎñÆ÷Ö¤ÊéµÄCAÊÇ·ñ¿É¿¿¡¢·¢ÐÐÕßÖ¤ÊéµÄ¹«Ô¿ÄÜ·ñÕýÈ·½â¿ª·þÎñÆ÷Ö¤ÊéµÄ¡°·¢ÐÐÕßµÄÊý×ÖÇ©Ãû¡±¡¢·þÎñÆ÷Ö¤ÊéÉϵÄÓòÃûÊÇ·ñºÍ·þÎñÆ÷µÄʵ¼ÊÓòÃûÏàÆ¥ÅäµÈ£»

5.¿Í»§¶ËËæ»ú²úÉúÒ»¸öÓÃÓÚºóÃæÍ¨Ñ¶µÄ¡°¶Ô³ÆÃÜÂ롱£¬È»ºóÓ÷þÎñ¶ËµÄ¹«Ô¿¶ÔÆä¼ÓÃÜ£¬½«¼ÓÃܺóµÄ¡°Ô¤Ö÷ÃÜÂ롱´«¸ø·þÎñ¶Ë£»

6.·þÎñ¶Ë½«ÓÃ×Ô¼ºµÄ˽Կ½â¿ª¼ÓÃܵġ°Ô¤Ö÷ÃÜÂ롱£¬È»ºóÖ´ÐÐһϵÁв½ÖèÀ´²úÉúÖ÷ÃÜÂ룻

7.¿Í»§¶ËÏò·þÎñ¶Ë·¢³öÐÅÏ¢£¬Ö¸Ã÷ºóÃæµÄÊý¾ÝͨѶ½«Ê¹ÓÃÖ÷ÃÜÂëΪ¶Ô³ÆÃÜÔ¿£¬Í¬Ê±Í¨Öª·þÎñÆ÷¿Í»§¶ËµÄÎÕÊÖ¹ý³Ì½áÊø£»

8.·þÎñ¶ËÏò¿Í»§¶Ë·¢³öÐÅÏ¢£¬Ö¸Ã÷ºóÃæµÄÊý¾ÝͨѶ½«Ê¹ÓÃÖ÷ÃÜÂëΪ¶Ô³ÆÃÜÔ¿£¬Í¬Ê±Í¨Öª¿Í»§¶Ë·þÎñÆ÷¶ËµÄÎÕÊÖ¹ý³Ì½áÊø£»

9.SSLµÄÎÕÊÖ²¿·Ö½áÊø£¬SSL°²È«Í¨µÀ½¨Á¢£¬¿Í»§¶ËºÍ·þÎñ¶Ë¿ªÊ¼Ê¹ÓÃÏàͬµÄ¶Ô³ÆÃÜÔ¿¶ÔÊý¾Ý½øÐмÓÃÜ£¬È»ºóͨ¹ýSocket½øÐд«Ê䣻

ÏÂÃæ£¬ÎÒÃǽáºÏJDKµÄSSL¹¤×÷Ô­Àí¶ÔNettyµÄSSLµ¥ÏòÈÏÖ¤¹ý³Ì½øÐн²½â£¬Ê×ÏÈ£¬ÎÒÃÇ¿´ÏÂJDK SSLµ¥ÏòÈÏÖ¤µÄÁ÷³Ìͼ£º

ͼ2-4 SSLµ¥ÏòÈÏÖ¤Á÷³Ìͼ

ÏÂÃæ½áºÏJDK SSLÒýÇæµÄµ÷²âÈÕÖ¾ÐÅÏ¢ÎÒÃǶÔSSLµ¥ÏòÈÏÖ¤µÄÁ÷³Ì½øÐÐÏêϸ½²½â£¬¶ÔÓڱȽϼòµ¥µÄÁ÷³Ì»á½øÐв½ÖèºÏ²¢¡£

²½Öè1£º¿Í»§¶ËʹÓÃTLSЭÒé°æ±¾·¢ËÍÒ»¸öClientHelloÏûÏ¢£¬Õâ¸öÏûÏ¢°üº¬Ò»¸öËæ»úÊý¡¢½¨ÒéµÄ¼ÓÃÜËã·¨Ì×¼þºÍѹËõ·½·¨ÁÐ±í£¬ÈçÏÂËùʾ£º

*** ClientHello, TLSv1
RandomCookie: GMT: 1389796107 bytes = { 125, 107, 138, 150, 226, 182, 238, 75, 38,
150, 222, 147, 127, 35, 36, 149, 172, 128, 152, 34, 110, 104, 176, 34, 180, 118, 185, 55 }
Session ID: {}
Cipher Suites: [TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,
TLS_RSA_WITH_AES_128_CBC_SHA, TLS_ECDH_ECDSA_WITH_AES_128_CBC_SHA, TLS_ECDH_RSA_WITH_AES_128_CBC_SHA,
TLS_DHE_RSA_WITH_AES_128_CBC_SHA, TLS_DHE_DSS_WITH_AES_128_CBC_SHA, TLS_ECDHE_ECDSA_WITH_RC4_128_SHA,
TLS_ECDHE_RSA_WITH_RC4_128_SHA, SSL_RSA_WITH_RC4_128_SHA, TLS_ECDH_ECDSA_WITH_RC4_128_SHA,
TLS_ECDH_RSA_WITH_RC4_128_SHA, TLS_ECDHE_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDHE_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_RSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_ECDSA_WITH_3DES_EDE_CBC_SHA, TLS_ECDH_RSA_WITH_3DES_EDE_CBC_SHA,
SSL_DHE_RSA_WITH_3DES_EDE_CBC_SHA, SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA, SSL_RSA_WITH_RC4_128_MD5,
TLS_EMPTY_RENEGOTIATION_INFO_SCSV]
Compression Methods: { 0 }
Extension elliptic_curves, curve names: {secp256r1, sect163k1, sect163r2, secp192r1, secp224r1,
sect233k1, sect233r1, sect283k1, sect283r1, secp384r1, sect409k1, sect409r1, secp521r1, sect571k1,
sect571r1, secp160k1, secp160r1, secp160r2, sect163r1, secp192k1, sect193r1, sect193r2, secp224k1,
sect239k1, secp256k1}
Extension ec_point_formats, formats: [uncompressed]

²½Öè2£º·þÎñ¶ËʹÓÃServerHelloÏûÏ¢À´ÏìÓ¦£¬Õâ¸öÏûÏ¢°üº¬Óɿͻ§ÌṩµÄÐÅÏ¢»ù´¡ÉϵÄÁíÒ»¸öËæ»úÊýºÍÒ»¸ö¿ÉÑ¡µÄ»á»°ID£¬ÒÔ¼°·þÎñ¶ËÑ¡ÔñµÄ¼ÓÃÜÌ×¼þËã·¨£¬ÏìÓ¦ÏûÏ¢ÈçÏ£º

*** ServerHello, TLSv1
RandomCookie: GMT: 1389796108 bytes = { 27, 170, 76, 238, 56, 58, 172, 146,
41, 159, 249, 213, 16, 214, 53, 167, 50, 74, 39, 107, 121, 63, 80, 26, 210, 149, 249, 194 }
Session ID: {83, 215, 155, 12, 122, 5, 231, 3, 13, 11, 17, 204, 56, 73, 119,
49, 85, 229, 220, 92, 55, 40, 25, 194, 198, 244, 200, 6, 55, 209, 23, 245}
Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA
Compression Method: 0
Extension renegotiation_info, renegotiated_connection: <empty>
***

²½Öè3£º·þÎñ¶Ë·¢ËÍ×ÔÇ©ÃûµÄÖ¤ÊéÏûÏ¢£¬°üº¬ÍêÕûµÄÖ¤ÊéÁ´£º

*** 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: 180074092335949740506599932729136061127910704822256890304785299212
89120399567693292155689698972062026646025485683710348109589875614228688670418
26997320367322716218554750309434289655244757299259864742384047112657948157239
74656070231306588457907121768485493115189644689102055777319298694358710534010
07782509767857568645054682957874162480829502504137753701941108204165639642395
91445925708790136700350526512926021140926345621403182628994210668730957728483
67874786322927437079881769937503767679525485790533062220506746478912515940552
94347989837561879359652740344329755331698082706888032724267649830488014296906
294110074041
public exponent: 65537
Validity: [From: Sun Jul 27 08:49:30 CST 2014,
To: Mon Jul 27 08:49:30 CST 2015]
Issuer: CN=localhost
SerialNumber: [ 53d44c9a]

]
Algorithm: [SHA1withRSA]
Signature:
0000: 10 05 5E D4 EE A8 1C 8E 82 F1 3F 6B 0A 34 9B 96 ..^.......?k.4..
0010: 97 BE 62 13 F7 2E 94 74 A5 46 CC AB C5 0B FC 67 ..b....t.F.....g
0020: 3C E1 1B 43 B8 A4 3B C9 F9 44 9F F2 D2 90 35 3C <..C..;..D....5<
0030: F6 47 78 3A AC 6B 87 E5 43 EA C8 C5 8C 4C 6E AB .Gx:.k..C....Ln.
0040: 46 F8 C8 C4 BA 86 97 1E C5 75 2F 85 15 CB A1 93 F........u/.....
0050: 0E 23 06 57 93 47 DF 8D 04 0F 21 AC FC E0 7D 14 .#.W.G....!.....
0060: 07 BE 0F 62 F4 75 A9 CE F9 B3 11 0B 75 B4 87 22 ...b.u......u.."
0070: D5 8E E2 0A A9 1F C2 15 3A 64 B2 23 8F 1A 84 6C ........:d.#...l
0080: EE 2C 3A C3 24 65 F5 BC 5C AF BD F8 B9 C4 45 83 .,:.$e..\.....E.
0090: 5B FF BD 36 E8 5D BE 98 03 2E AB 3F FE EC 9A 7B [..6.].....?....
00A0: 31 35 7D EF 53 81 8B 7A 8B 37 7D BD EB 17 F0 36 15..S..z.7.....6
00B0: 93 CF 74 28 A3 C1 8B E1 B1 12 9F 44 20 CA 48 64 ..t(.......D .Hd
00C0: D6 F5 B0 B1 D9 18 AA F6 88 02 26 93 C8 B8 91 1A ..........&.....
00D0: F8 B0 8B E6 7D C6 56 39 B2 6A AF 73 D2 78 76 1A ......V9.j.s.xv.
00E0: 10 F0 C5 98 4F 90 39 2F 84 BC A0 78 81 8B ED 04 ....O.9/...x....
00F0: B8 60 49 84 C3 BD CC D2 CA 52 0A 03 E0 6C 21 B3 .`I......R...l!.

]
***

²½Öè4£º·þÎñ¶ËÏò¿Í»§¶Ë·¢ËÍ×Ô¼ºµÄ¹«Ô¿ÐÅÏ¢£¬×îºó·¢ËÍServerHelloDone£º

*** ECDH ServerKeyExchange
Server key: Sun EC public key, 256 bits
public x coord: 11246390291863077910794590233832192297756589204670697
905888685651118114908704
public y coord: 14161558430218398366136024174925258002831938156653157
074058492642854053163673
parameters: secp256r1 [NIST P-256, X9.62 prime256v1] (1.2.840.10045.3.1.7)
*** ServerHelloDone

²½Öè5£º¿Í»§¶Ë¶Ô·þÎñ¶Ë×ÔÇ©ÃûµÄÖ¤Êé½øÐÐÈÏÖ¤£¬Èç¹û¿Í»§¶ËµÄÐÅÈÎÖ¤ÊéÁбíÖаüº¬ÁË·þÎñ¶Ë·¢Ë͵ÄÖ¤Ê飬¶ÔÖ¤Êé½øÐкϷ¨ÐÔÈÏÖ¤£¬Ïà¹ØÐÅÏ¢ÈçÏ£º

***
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: 18007409233594974050659993272913606112791070482225689030478529921
2891203995676932921556896989720620266460254856837103481095898756142286886704
1826997320367322716218554750309434289655244757299259864742384047112657948157
2397465607023130658845790712176848549311518964468910205577731929869435871053
4010077825097678575686450546829578741624808295025041377537019411082041656396
4239591445925708790136700350526512926021140926345621403182628994210668730957
7284836787478632292743707988176993750376767952548579053306222050674647891251
5940552943479898375618793596527403443297553316980827068880327242676498304880
14296906294110074041
public exponent: 65537
Validity: [From: Sun Jul 27 08:49:30 CST 2014,
To: Mon Jul 27 08:49:30 CST 2015]
Issuer: CN=localhost
SerialNumber: [ 53d44c9a]

]
Algorithm: [SHA1withRSA]
Signature:
0000: 10 05 5E D4 EE A8 1C 8E 82 F1 3F 6B 0A 34 9B 96 ..^.......?k.4..
0010: 97 BE 62 13 F7 2E 94 74 A5 46 CC AB C5 0B FC 67 ..b....t.F.....g
0020: 3C E1 1B 43 B8 A4 3B C9 F9 44 9F F2 D2 90 35 3C <..C..;..D....5<
0030: F6 47 78 3A AC 6B 87 E5 43 EA C8 C5 8C 4C 6E AB .Gx:.k..C....Ln.
0040: 46 F8 C8 C4 BA 86 97 1E C5 75 2F 85 15 CB A1 93 F........u/.....
0050: 0E 23 06 57 93 47 DF 8D 04 0F 21 AC FC E0 7D 14 .#.W.G....!.....
0060: 07 BE 0F 62 F4 75 A9 CE F9 B3 11 0B 75 B4 87 22 ...b.u......u.."
0070: D5 8E E2 0A A9 1F C2 15 3A 64 B2 23 8F 1A 84 6C ........:d.#...l
0080: EE 2C 3A C3 24 65 F5 BC 5C AF BD F8 B9 C4 45 83 .,:.$e..\.....E.
0090: 5B FF BD 36 E8 5D BE 98 03 2E AB 3F FE EC 9A 7B [..6.].....?....
00A0: 31 35 7D EF 53 81 8B 7A 8B 37 7D BD EB 17 F0 36 15..S..z.7.....6
00B0: 93 CF 74 28 A3 C1 8B E1 B1 12 9F 44 20 CA 48 64 ..t(.......D .Hd
00C0: D6 F5 B0 B1 D9 18 AA F6 88 02 26 93 C8 B8 91 1A ..........&.....
00D0: F8 B0 8B E6 7D C6 56 39 B2 6A AF 73 D2 78 76 1A ......V9.j.s.xv.
00E0: 10 F0 C5 98 4F 90 39 2F 84 BC A0 78 81 8B ED 04 ....O.9/...x....
00F0: B8 60 49 84 C3 BD CC D2 CA 52 0A 03 E0 6C 21 B3 .`I......R...l!.

]

²½Öè6£º¿Í»§¶Ë֪ͨ·þÎñÆ÷¸Ä±ä¼ÓÃÜËã·¨£¬Í¨¹ýChange Cipher SpecÏûÏ¢·¢¸ø·þÎñ¶Ë£¬Ëæºó·¢ËÍFinishedÏûÏ¢£¬¸æÖª·þÎñÆ÷Çë¼ì²é¼ÓÃÜËã·¨µÄ±ä¸üÇëÇó£º

nioEventLoopGroup-2-1, WRITE: TLSv1 Change Cipher Spec, length = 1
*** Finished

²½Öè7£º·þÎñ¶Ë¶ÁÈ¡µ½Change Cipher Spec±ä¸üÇëÇóÏûÏ¢£¬Ïò¿Í»§¶Ë·µ»ØÈ·ÈÏÃÜÔ¿±ä¸üÏûÏ¢£¬×îºóͨ¹ý·¢ËÍFinishedÏûÏ¢±íʾSSL/TLSÎÕÊÖ½áÊø¡£

nioEventLoopGroup-3-1, READ: TLSv1 Change Cipher Spec, length = 1
nioEventLoopGroup-3-1, READ: TLSv1 Handshake, length = 48
*** Finished
verify_data: { 157, 255, 187, 52, 139, 16, 20, 190, 11, 35, 79, 0 }
***
nioEventLoopGroup-3-1, WRITE: TLSv1 Change Cipher Spec, length = 1
*** Finished
   
5758 ´Îä¯ÀÀ       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¼°ÆäÇ°ÑØ¼¼Êõ