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 |
|