TWSNMPに電子署名する話(MicrosoftはAppleを信用していないかも?)
最近はコンピュータのセキュリティーに厳しいので誰が作ったプログラムかわからないものは実行できないようになっています。誰が作ったプログラムか証明するには電子署名が必要です。TWSNMPのプログラムや配布しているインストーラーに電子署名をした時の話を書きます。
電子署名するとは
まず、プログラムやインストーラーに電子署名するというのは、どういうことかというと、詳しいけど難しい説明
ということです。何言っているかわかりにくいです。簡単にポイントをまとめると。
・私しか知らない秘密(鍵)を私が持っていることを信用できる誰かが保証してくれる証明書が発行されている。
・この秘密(鍵)でプログラムのデータが正しいことを証明できる電子署名を私が作る。
・あなたは、私から受け取ったプログラム、電子署名と証明書で、プログラムが私が作ったものと同じか確認できる。
ということだと思います。
電子署名のためにやること
では、プログラムに電子署名するためには、何をすればよいのかというと、
・秘密鍵を作る。
・信用できる誰かに秘密鍵を私が持っていることを保証できる証明書を発行してもらう。
・秘密鍵でプログラムに電子署名する。
という流れになります。
Mac版の場合
Macの場合は、Appleに1万円ぐらい払って開発者登録すると、Appleが信用できる誰かになって証明書を発行してくれます。
Appleの開発者登録は
からできます。登録画面は英語です。お金の支払いは先に完了しますが登録自体は2日ぐらいかかります。小さく48時間以内とか書いてあります。私は心配になって問い合わせしました。
登録したら
https://help.apple.com/developer-account/#/dev04fd06d56
と
https://help.apple.com/developer-account/#/devbfa00fef7
の開発者向けのヘルプを参考にして、秘密鍵と証明書要求を作成できます。作成した証明書要求を開発者サイトの
https://developer.apple.com/account/resources/certificates/list
の画面で追加(+)ボタンを押して証明証を発行してもらいます。この時、TWSNMPのようなプログラムは、
Developer ID Installer(赤の矢印)のインストーラーに署名するための証明書と Developer ID Application(緑の矢印)のアプリケーションに署名するための証明書を作成します。発行されたらダウンロードしてダブルクリックすれば、キーチェーンに登録されます。
この証明書の秘密鍵を使ってアプリケーションに署名するには、
codesign -s "Developer ID Application: *****" TWSNMP.app
というコマンドを実行します。-sのパラメータは、登録した証明書の名前です。
次に、インストーラーに署名するには、
productsign --sign "Developer ID Installer: *****" TWSNMP.pkg TWSNMPSigned.pkg
というコマンドを実行します。パラメータは、証明書の名前、署名前のパッケージファイルと署名後のパッケージファイルです。アプリケーションの署名とはコマンドが違うことに注意が必要です。
これで、Mac版のTWSNMPは、ちゃんとしたものになりました。ちょっと安心。
Windows版の場合
Windowsの場合は、誰かに証明証を発行してもらおうとすると年間1万円では済まないようです。詳しくは、
です。費用もさることながら個人で信頼されるコード署名証明書を取得するために苦労する気はありません。なので、先程のサイトの説明にあるオレオレ証明書にしました。オレオレ証明書というのは、信用できる誰かが私ということです。
フリーのVisual Studioをインストールすれば、
makecert -n "CN=TWSNMP,C=JP" -b 01/01/2020 -e 01/01/2100 -r -sv twsnmp.pvk twsnmp.cer
pvk2pfx -pvk twsnmp.pvk -spc twsnmp.cer -pfx twsnmp.pfx -f -pi "パスワード" -po "パスワード"
のようなコマンドで証明書は作成できます。パスワードの部分は、秘密鍵を守るためのパスワードです。ここで作成したtwsnmp.cerのファイルが公開するオレオレ証明書です。この証明書を皆さんが信用してくれれば、TWSNMPは信用できるアプリケーションに昇格できるということです。
作成した証明書の秘密鍵を使って、
signtool.exe sign /fd sha256 /f twsnmp.pfx /p パスワード /v "TWSNMP.EXE"
のコマンドを実行すれば、実行(EXE)ファイルに署名できます。
次に、
signtool.exe sign /fd sha256 /f twsnmp.pfx /p パスワード /v .\twsnmp.msi
のコマンドを実行すれば、インストーラーに署名できます。
MicrosoftはAppleの開発者を信用しているか?
Mac版の説明に書いたように、Appleに年間1万円払って開発者登録すれば、Appleから証明書を発行してもらえます。さて、この証明書を使ってWindows版のプログラムに署名すれば、年間1万円でちゃんとした証明書でコード署名できるかもしれないと思い実験してみました。
Macのキーチェーンで証明書を右クリックすると「....証明書を書き出す」というメニューが表示されます。これを実行してフォーマットを
を選択すると、秘密鍵付きで証明書をファイルに出力することができます。
このファイルを色々変換して、Windowsのプログラムに署名してみました。
結果は、残念でした。オレオレ証明書と同じでWindowsはAppleの発行した開発者の証明書を信用していませんでした。
考えてみれば、これができるとコード署名用の証明書の発行を商売にしている会社に大きな影響があります。
世の中、そんなに甘くありませんでした。
つづく