Node-v0.10.34ãã¯ã¾ã£ãã¯ãã¹ã«ã¼ã証ææ¸ã¨OpenSSLã®è½ã¨ãç©´
æ¢ã«12æ22æ¥ã§ããããã®ã¨ã³ããªã¼ã¯ãNode.js Advent Calendar 2014ã®13æ¥ç®ã®ã¨ã³ããªã¼ã§ãã
ããç§ãæ¸ãã®é
ãããããããªãã§ããã©â¦(è¨ã訳)ãã¡ããã©ã¿ã¤ã ãªã¼ãªãã¿ãããã®ã§ãå
æ¥ãªãªã¼ã¹ãããNode-v0.10.34ã§çºçããï¼ç¾å¨ãç¶ç¶ãã¦ããï¼åé¡ã«ã¤ãã¦æºãã£ãçµç·¯ãèªåã®ç®ç·ã§æ¸ãã¦ã¿ã¾ãã
追è¨ï¼æ¥æ¬æéã®12/24ã«Node-v0.10.35ããªãªã¼ã¹ããã¾ããã http://blog.nodejs.org/2014/12/23/node-v0-10-35-stable/ æ¬è¨äºã®ä¸å ·åãä¿®æ£ããã¦ãã¾ãã
1. Node-v0.10.34ãªãªã¼ã¹ç´å¾ã«issueçºç
å é±12/17ã«Node v0.10.34 (Stable)ããªãªã¼ã¹ããã¾ããã10æä¸æ¬ã«POODLEé¨ãã§OpenSSLã«å¯¾å¿ãã Node-v0.10.33 ããããã2ãæå¼±çµã£ã¦ã®ãªãªã¼ã¹ã§ãã
å®ã¯ä»åã®ãªãªã¼ã¹ãNode-v0.10ç³»ã®Stableçã®ãªãªã¼ã¹ã§ããã©ãèªåçã«ã¯ちょっとでかい変更ãNodeã«ã³ããããã¦ããã®ã§ããã1ã«æç¨Nodeã®ã³ã¢ãã¼ã ã¨ããããããåããç¶ãã¦ãã¾ãããå¿é æ§ã§ããªãªã¼ã¹å¾ã«èªåã®å¤æ´ã§ãªããåé¡ãåºããã¾ãããªãããªãããã£ãããã対å¿ããªãã¨ããããªããã¨æã£ã¦ããã®ã§Node-v0.10.34ã®ãªãªã¼ã¹ã¯ããã¤ããã注è¦ãããå¾ã¾ããã§ããã
ãããªã¨ãããæ¥æ¬æéã®12/18(æ¨)ã®æã«ç¡äºNode-v0.10.34ããªãªã¼ã¹ããã¾ããã
ããã£ã¨ãªãªã¼ã¹ãè¯ãã£ãããããããªè¦å´ããã®ã«ãããªã·ã³ãã«ãªãªãªã¼ã¹ã¢ãã¦ã³ã¹ããã£ãã£ã¦é¢ä¿è ã¨DMã交ããã¤ã¤ãªãªã¼ã¹å¾ã®æ§åãè¦ã¦ããã¨ãããç´å¾ã« githubã«ãnode v0.10.34 causes untrusted cert errors #8894ãã¨ãã issueãé£ã³è¾¼ãã§ãã¾ããã
ãã£ããªã«ãã npm install phantomjs ã§ã¨ã©ã¼ãåºã¦ããã¨ã®ãã¨ã試ãã¦ã¿ãã¨AWS ã® S3 ãµã¼ãã¹ã¸ã®TLSæ¥ç¶ã§èªè¨¼ã¨ã©ã¼(ä¿¡é ¼ãããªããµã¼ã証ææ¸ã§ããã¨ã©ã¼)ãçºçãã¦ããããã§ããåã«ããã¨Travis CIããªããæ°Nodeã§æ²é³´ãããã¦ãããããã
ã§ãèªåã«é¢ä¿ãããããããªããã©æ©é調ã¹ããã¨ã«ãã¾ããããªã«ããã¾ãã¯ãã¨ã©ã¼ã®åç¾ã³ã¼ãã®ä½æã§ããAWSã®S3ãµã¼ãã«TLSã§æ¥ç¶ãã¦ã¿ã¾ãã
// tls_s3.js: tls error check to s3.amazonaws.com var tls = require('tls'); var client = tls.connect(443, 's3.amazonaws.com', function() { console.log('TLS connected'); client.end(); }); client.on('error', function(err) { console.log(err); });
ããã¦æ°æ§2ã¤ã®Nodeã§åä½çµæãæ¯ã¹ã¦ã¿ãã¨ã
$ ~/tmp/oldnode/node-v0.10.34/node tls_s3.js [Error: CERT_UNTRUSTED] $ ~/tmp/oldnode/node-v0.10.33/node tls_s3.js TLS connected
ãã ã確ãã«æ°ããNode-v0.10.34ã ãã¨ã©ã¼ã«ãªã£ã¦ãããããããã¼ãNode-v0.10.34ã
å®ã¯ããã俺ã®å¤æ´ç®æã«ãããã®ãããªãããã¼ãã¨ãããã¨ãåããå°ãã»ã£ã¨ãã¡ããã¾ãããã§ãAWSãµã¼ãã¹ã¸ã®TLSæ¥ç¶ãè»ä¸¦ã¿ã¨ã©ã¼ã«ãªãã®ã¯ããããå½±é¿ã§ããã§ãããããã°ã調æ»ãç¶ç¶ã§ãã
2. ã¨ã©ã¼ã®åå ã¯å³å¤æãã ãè¬ãæ®ã
ã³ããããã°ããã¨ã©ã¼ã®åå ãããcrypto: update root certificatesãã®å¤æ´ã«ããã®ã¯æç½ã§ããã
Nodeã¯ãMozillaã管çãã¦ããルート証明書データãNodeã®ソース内に埋め込んでå©ç¨ãã¦ãã¾ãã
ä»åãã¡ããã©Node-v0.10.34ã§ãã®ã«ã¼ã証ææ¸ã®ãã¼ã¿ãæ´æ°ããã®ã§ããããåé¡ãçºçãããã®ã§ããããããAWSã®S3ãµã¼ãã®è¨¼ææ¸ãçºè¡ããã«ã¼ã証ææ¸ãåé¤ããã¦ãããã ã¨ããäºæ¸¬ã§ãã¾ããã
ãã§ãã¡ãã£ã¨å¾ ã¦ãåç´ã«ãã®ã³ããããRevertããã ããããã¡ããã©ããã¦ã¨ã©ã¼ãçºçããã®ãããã¤ãçåç¹ããããããã¡ãã£ã¨èª¿ã¹ãã¹ãã ãã
ããæããgithubã«ããã³ã¡ã³ããæ¸ãã®ãããã¾ããã
- çåï¼ï¼ãªãã§Mozillaã®ãã¼ã¿ããS3ãµã¼ãã¹ã®ãµã¼ã証ææ¸ãçºè¡ããroot CAãåé¤ããã¡ãã£ã¦ãã®ï¼
ããã¯ãããããã¾ãããNode-v0.10.34ãã1024-bitã®RSAéµé·ãæã¤ã«ã¼ã証ææ¸ãåé¤ããã¦ããããã§ãã
Mozillaããã¯æ¢ã«ã¢ãã¦ã³ã¹ãPhasing out Certificates with 1024-bit RSA Keysããåºã¦ãã¾ããããã®ã¢ãã¦ã³ã¹ã¯ã1024-bitã®RSAéµé·ãæã¤ã»ãã¥ãªãã£å¼·åº¦ã®ä½ãã«ã¼ã証ææ¸ãFirefox32ããåé¤ããäºåã§ããæ¢ã«ä»å¹´ã®7æã«ãã®ã«ã¼ã証ææ¸ã¯åé¤ãããAWSã®S3ãµã¼ãã®è¨¼ææ¸ã¯ãã®ã«ã¼ã証ææ¸ãå
ã«çºè¡ãããã®ã§ããããããã¦ä»åã«ã¼ã証ææ¸ã¾ã§ãã§ã¼ã³ããã©ããã«TLSèªè¨¼ã¨ã©ã¼ãåºã¦ããã¨ãopenssl s_clientã§è¦ãã¨ç¢ºãã«ãã®ã«ã¼ã証ææ¸ã¾ã§ãã§ã¼ã³ãæ¥ã¦ãããµããããã
ã§ãã¡ãã£ã¨å¾ ã¦ããããªãFirefox32ããªãªã¼ã¹ããã9æé ã«ãã£ã¨é¨åãèµ·ãã¦ããã¯ãããªãã§ä»ã«ãªã£ã¦Nodeã§åé¡ã«ãªãï¼ è©¦ãã«Firefoxã§ã¢ã¯ã»ã¹ããã¨TLSã®èªè¨¼ã¨ã©ã¼ã¯åºã¦ããªãã
- çåï¼ï¼åãrootCAãã¼ã¿ã使ã£ã¦ããFirefoxã§S3ãµã¼ãã«TLSã¢ã¯ã»ã¹ãã¦ãã¨ã©ã¼ãã§ãªãããªãï¼ï¼
ãã¼ãããã£ã¡ã¯ããã«ã¯ããããªãã¼ããããããã¦ãéã«ãUS/Canadaã«ããã³ã¢ãã¼ã ã®Julienãæ°ã¥ãå§ãã¦è¿äºãæ¸ãè¾¼ã¾ãã¾ãããåã®è¦ç«ã¦ã¨åãã ãio.jsãforkããFedorãgithubä¸ã§åé¡åãåãã«åå ãã¦ãã¾ããã
3. ç¯äººã¯ã¯ãã¹ã«ã¼ã証ææ¸ã¨OpenSSL
æ¼é£¯ãé£ããªãã Firefox ã®ã³ããããã°ãã bugzilla ããã©ã£ã¦ããã¨ã該å½ã®Verisignã®rootCAãåé¤ãã ticket ã§ãµã¨ãããªã³ã¡ã³ããç®ã«å
¥ãã¾ããã
Bug 986005 - Turn off SSL and Code Signing trust bits for VeriSign 1024-bit roots
ç°¡åã«è¨³ãã¨ã
ãã®å¤æ´ããçµå±èµ·ãããã¨ï¼ https://lists.fedoraproject.org/pipermail/devel/2014-September/202127.html 端çã«æ¸ãã¨ãs3.amazonaws.com ã¯å¤ãã«ã¼ã証ææ¸ãæãä¸é証ææ¸ãã¾ã æã£ã¦ããã NSSã¯ãä¸å¿ è¦ãªä¸é証ææ¸ãç¡è¦ãã¦ãä¿¡é ¼ã§ããG5ã®ã«ã¼ã証ææ¸ã¸ã®ãã§ã¼ã³ãè¦ã¤ã ããã¨ãã§ããããã©ããä»ã®è¨¼ææ¸æ¤è¨¼ãããã½ããã¯å¤±æããããã ãopenssl ã¯ã㮠失æããã½ããã®ä¸ã¤ã§ãããã ã·ãã³ããã¯ã¯ããããå¤ãã«ã¼ã証ææ¸ãæãä¸é証ææ¸ããµã¼ãè¨å®ããé¤ãããã« Amazonã«é£çµ¡ãã¹ãã ã¨æãããä»ã®é¡§å®¢ã«ãè¨ãã¹ãã ã¨æãã
ããã¼ãã¾ãã«ããã ãã¼ãOpenSSLã®æåã®åé¡ããã¼ãããããæä¸ãã ãã
ãããªéã« github ä¸ã§ Fedor ã®ã³ã¡ã³ããé²ãã§ãã¾ããè±èªã§ã®èª¬æã¯æéãããããé¢åãããã®ã§ã該å½ã³ã¡ã³ãã®ãªã³ã¯ã¨Revertじゃなくて1024-bitRSA鍵長を復活させるパッチãæ©éä½ã£ã¦ãgithub issueã«ã³ã¡ã³ããã¾ããã
Nodeã®rootCAæ å ±ãæ ¼ç´ããããããã¡ã¤ã«ã¯ãå®ã¯curl ã® perl ã¹ã¯ãªãããæåãããã®ã§ããåé¤ãããrootCA証ææ¸ã¯ãCKT_NSS_MUST_VERIFY_TRUST ã¨ããã¬ãã«ã«ã«ãã´ã©ã¤ãºããã¦ããã®ã§ãããå«ãããããã§ããã¾ãã Node ã®ä¿®æ£ã§ perl ã®ããããæ¸ãã¨ã¯æãããããªãã£ã(æ±)â¦
å¾ããã¡ããã¨èª¿ã¹ããã§ãããbugzillaã§æ¸ããã¦ãããä¸è¦ãªä¸é証ææ¸ãã¯å®ã¯ã¡ããã¨ä½¿ãããçç±ããã£ããã§ããã
ãã®ä¸é証ææ¸ã¯ãã¯ãã¹ã«ã¼ã証ææ¸ã¨å¼ã°ãããã®ã§ã2048-bitã®RSAéµé·ã®rootCA証ææ¸ã¨1024-bitã®RSAéµé·ã®rootCA証ææ¸ã両æ¹ã¨ãæå¹ã«ãã¦PKIã®ä¸ä½äºææ§ãä¿ã¤ç¨éã§ä½¿ããããã®ã§ããå®éãS3ã®ãµã¼ãã®è¨¼ææ¸ãã§ã¼ã³ã¯ä¸å³ã®æ§ã«ãªã£ã¦ãã¾ãã
NSSã¯ä¸å³ã®èµ¤è²ã®ãã§ã¼ã³ã§æ¤è¨¼ã失æããã°éè²ã®ãã§ã¼ã³ã«ãã©ã¼ã«ããã¯ããã®ã«ãOpenSSLã¯èµ¤è²ã®ãã§ã¼ã³ã失æããã°ãã®ã¾ã¾TLSã®ãµã¼ãèªè¨¼ãã¨ã©ã¼ã«ãªã£ãã¾ã¾ãªãã§ãã
ã¤ã¾ãOpenSSLã¯ã¯ãã¹ã«ã¼ã証ææ¸ã®æ¤è¨¼ãã¡ããã¨è¡ããªãã®ã§ãããOpenSSLå¼±ããã¼ã
4. ãã£ã± Fedor ããããªã
ã¾ãèªåã¨ãã¦ã¯ãçåï¼ã»ï¼ã解決ããããã ããOpenSSLã®åé¡ã ããä¸æçã«æ»ããããªãã§ããã¨æã復活ãããããããæ¸ãããã§ãããç´å¾ã«Fedorããæããããã¬è§£æ±ºçãåºã¦ãã¾ããã
ã³ã¡ã³ããæ¸ãã¦æ°åå¾ãFedorãã diff ã示ããã¾ããã
ãã¸ã£ãOpenSSLã®ã³ã¼ãã® diffï¼ ç´ããã£ã¦ãããã¨ï¼ã
å®é試ããªãã¨ã³ã¡ã³ãè¿ããªããã¨ãããã¨ã§ãæ¥ãã§ãã©ã³ãåããããããã¦ããã«ããç´ãããã¹ãã³ã¼ããå®è¡ãã¾ããã
ããã¼ï¼ãã¨ã©ã¼ãªããã
ç§ãåé¡ã®è©³ç´°ãæ¸ãããªã³ã¯ã示ããç´å¾ã«FedorãOpenSSLã®è©²å½ç®æãç¹å®ãããããä½æãããã¦ç§ã®ãã¹ãããã¹ã
ãã®å¾ãããã¯ã¡ãã£ã¨ä¿®æ£ãããOpenSSLã®ãã°ãã©ãã«ã¼ã«ããã
[PATCH] x509: skip certs if in alternative cert chain (http://rt.openssl.org/Ticket/Display.html?id=3637&user=guest&pass=guest)
ãéããã¾ãããã¾ããã¤ãã®ãã¨ã§ãããOpenSSLã®ãã¼ã ããã¯ä»æ¥ã¾ã§è¿çãªãã§ããå®ã¯ç§ã®å¥ãããã以åããæ¾ç½®ç¶æ
ã®ã¾ã¾ãOpenSSLãForkããããªãæ°æã¡ããããã¾ãããããã調ã¹ã¦ã¿ãã¨ä»åã¨åãç¾è±¡ã2年以ä¸åã«å ±åããã¦ä¿®æ£ããããéããã¦ãã¾ããããæ¾ç½®ãããã¾ã¾ã§ããã(Bug: verification fails if muliple certification path (EV/Verisign) http://rt.openssl.org/Ticket/Display.html?id=2732&user=guest&pass=guest)
ã§ãçµå± Node ã§ã¯v0.10ã«1024-bitã®RSAéµé·ã®ã«ã¼ã証ææ¸ã ã復活ããããã¨ã«ãªãã¾ããã
ãsrc: re-add 1024-bit SSL certs removed by f9456a2 #8904ã
OpenSSLã®ä¿®æ£ãã©ããããã¯ä»å¾ã®æ¤è¨äºé
ã§ãããã次ã®Node-v0.10.35ã§ã¯ãã®åé¡ãç´ãäºå®ã§ãã®ã§ãNodeã®ãã¼ã¸ã§ã³ã¢ããã¯ãã°ãããå¾
ã¡ãã ãããä»ã«ãtimerã®ãã°ã¨ããä¿®æ£ããã¦ã¾ãã
æ®å¿µãªã®ã¯ Node-v0.11.15ãç¿æ¥ã®12/18ã«ãªãªã¼ã¹äºå®ã ã£ããã§ããããããã®åé¡ã®ä½æ³¢ã§å»¶æã«ãªã£ãããã§ããNode-v0.11.15ã§åé¡ãªããã°2é±éå¾ã®2015/1/1é ã«Node-v0.12ããªãªã¼ã¹ã¨ããè¨ç»ã¯ããããããæ¥å¹´ä»¥éã«æã¡è¶ãã§ãã
io.jsã®Forké¨åã®ä¸ãä»åã®Stableçãªãªã¼ã¹å¾ã®ããããã§ããã³ã Node-v0.12ã®ãªãªã¼ã¹ã¯ä¸ä½å ¨ä½ã©ããªãã®ããå è¡ãã¯ã¾ãã¾ãè¦ããªããªãã¾ããã