更新チェックの HTTPS 移行
本件の作業
[jpbeta fe3f253] ti35012 use https for update check 1 file changed, 1 insertion(+), 1 deletion(-)
サーバーは動いています:
curl -i "https://www.nvda.jp/updateCheck/"
電子署名をつけたバージョンを試作して、Windows 8.1 環境にインストール、 更新のチェックを実行すると、下記のようにエラーになった。
DEBUGWARNING - updateCheck.AutoUpdateChecker._bg (11:27:03): Error checking for update Traceback (most recent call last): File "updateCheck.pyo", line 116, in _bg File "updateCheck.pyo", line 81, in checkForUpdate File "urllib.pyo", line 87, in urlopen File "urllib.pyo", line 213, in open File "urllib.pyo", line 443, in open_https File "httplib.pyo", line 997, in endheaders File "httplib.pyo", line 850, in _send_output File "httplib.pyo", line 812, in send File "httplib.pyo", line 1216, in connect File "ssl.pyo", line 350, in wrap_socket File "ssl.pyo", line 566, in __init__ File "ssl.pyo", line 788, in do_handshake IOError: [Errno socket error] [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:581)
updateCheck.py で www.nvaccess.org からルート証明書を取り直す処理を修正する必要:
def _updateWindowsRootCertificates(): crypt = ctypes.windll.crypt32 # Get the server certificate. sslCont = ssl._create_unverified_context() u = urllib.urlopen("https://www.nvaccess.org/nvdaUpdateCheck", context=sslCont) cert = u.fp._sock.getpeercert(True) u.close() # Convert to a form usable by Windows. certCont = crypt.CertCreateCertificateContext( 0x00000001, # X509_ASN_ENCODING cert, len(cert)) # Ask Windows to build a certificate chain, thus triggering a root certificate update. chainCont = ctypes.c_void_p() crypt.CertGetCertificateChain(None, certCont, None, None, ctypes.byref(CERT_CHAIN_PARA(cbSize=ctypes.sizeof(CERT_CHAIN_PARA), RequestedUsage=CERT_USAGE_MATCH())), 0, None, ctypes.byref(chainCont)) crypt.CertFreeCertificateChain(chainCont) crypt.CertFreeCertificateContext(certCont)
チケット #34796
更新チェックでハッシュ値のチェック処理
において、HTTPS 導入そのものを見送ったので、このチケットで HTTPS 導入を扱います。
役員会での意見交換の結果 startssl.com の無料プランを検討することになり、 とりあえず Web サーバー側への HTTPS の導入を行いました。
https://www.nvda.jp/
現状の内容は従来の HTTP のコンテンツと同一です。