インストーラーに電子署名を導入する
NVDA 日本語版における電子署名の必要性について検討しています。
電子署名がないために、Vista 以降では NVDA 日本語版のインストール時に「余分な確認ダイアログ」が必要になっているのはご承知の通りです。
本家 2012.2 に向けて行われている Windows 8 Metro アプリの読み上げが、システムの制約で、リリース版のインストール環境(ポータブル環境でないこと)でしかサポートされない、ということが、いま翻訳中の文書に書かれています。
また、チケット28235やチケット28326も、NVDA の権限の影響と思われます。
前述した本家の Wiki の記事は「これはオレオレ認証のやり方で、開発者のマシン以外では無効だよ」と書かれています。
証明書を取得してプログラムに組み込むことについて、すこし情報を集めました:
かつては法人でないと証明書が取れなかったという話です。
GMOグローバルサイン http://jp.globalsign.com/service/?navi=service
ご意見をお聞かせください。
他のチケットにも書きましたが、自己署名証明書つきの scons に成功しました。
使ったバージョンは lp:nvdajp 4235 です。
秘密鍵のパスワードをつけない方法でやったらうまくいきました。
del selfcert.* makecert -r -n "CN=selfsigned" -sv selfsigned.pvk selfsigned.cert cert2spc selfsigned.cert selfsigned.spc pvk2pfx -pvk selfsigned.pvk -spc selfsigned.spc -PFX selfsigned.pfx certutil -addstore root selfsigned.spc scons launcher certFile=selfsigned.pfx publisher=nvdajp release=1 version=dummy
細かいことはこちらに書きました。 http://ja.nishimotz.com/nvdajp_certfile
ちなみに scons で使ったマシンとは違うマシン (Windows 8 CP x86 JP)にインストールしようとしたところ、「次の不明な発行元からのプログラム・・・」と表示されたので、配布ファイルとしては不適切であることも確認できました。
デジタル署名だけ別のマシンで行う(別の方に依頼する)ことが可能か、試しました。
以下の手順で、デジタル署名された launcher を作ることに成功しました。
このファイルを Windows 8 CP x86 にインストールしたところ、Metro アプリの実行中に NVDA-N でメニューが開くようになりました。
以下のチケットはこの問題に関係があると考えられます。
チケット 24373 windows vistaにおいて、UACが読み上げられない http://sourceforge.jp/ticket/browse.php?group_id=4221&tid=24373
2012.2.1jp でデジタル署名を導入しました。
インストーラーの実行ファイルに電子署名を行うための作業をまとめます。
最初に行った実験は以下のとおりです。
Windows SDK の makecert などを実行できるコマンドプロンプトを開く。
http://www.nvda-project.org/wiki/UsingASelfSignedCertificate
の手順どおりに作業を行い、selfsigned.pfx を作る。
やってみると以下のエラーが出る。
Traceback (most recent call last): File "setup.py", line 189, in <module> + getRecursiveDataFiles("nvdajptext", "nvdajptext", excludes=("*%s"%sourceModExtention,"*%s"%compiledModExtention)) File "c:\Python27\lib\distutils\core.py", line 152, in setup dist.run_commands() File "c:\Python27\lib\distutils\dist.py", line 953, in run_commands self.run_command(cmd) File "c:\Python27\lib\distutils\dist.py", line 972, in run_command cmd_obj.run() File "c:\Python27\lib\site-packages\py2exe\build_exe.py", line 243, in run self._run() File "c:\Python27\lib\site-packages\py2exe\build_exe.py", line 312, in _run self.create_binaries(py_files, extensions, dlls) File "c:\Python27\lib\site-packages\py2exe\build_exe.py", line 572, in create_binaries arcname, target.script) File "c:\Python27\lib\site-packages\py2exe\build_exe.py", line 898, in build_executable mfest, mfest_id = self.build_manifest(target, src) File "setup.py", line 90, in build_manifest target.uac_info = (target.uac_info[0], True) TypeError: 'NoneType' object is not subscriptable scons: *** [dist_installer] Error 1 scons: building terminated because of errors.