個人事業主が屋号でコードサイニング証明書を取得する

Windows用アプリの電子署名(コードサイニング)を個人事業主の屋号で取得する方法です。アプリ作成も電子署名も必要に迫られなんとかやってるレベルなので用語含め間違いがあったらごめんなさい。

今回“個人開発者でコードサイニング証明書を取ろう 2021”をとても参考にさせてもらいました。記事中で個人開発者の本名・住所をさらすリスクについて触れられていましたが、住所はともかく氏名については本記事のように屋号表記にする手もあるかもしれません。会社員でも問題ないと思います。個人事業主(自営業者)になること自体は簡単で、税務署に開業届けを出すだけ。最初にこれを2部作り、税務署印入りの控えを手元に置いておくことが大事です。毎年の確定申告についてはお調べ下さい。

余談ですがうちでは開業届を1部しか作らずそれを税務署に提出しちゃったので当初控えがなく、後日おねだりして原本を探し出していただき、そのモノクロコピーをもらいました。ただ重要な税務署受領印が水色だったかではっきり写らず、スキャンしてノイズだらけになるほどコントラストを上げないと提出先に認めてもらえませんでした。PCとハンディースキャナーを持ち込んでカラーで取り込み直したいところ。10年以上前のことなので現在も紙で保存されてるかはわかりませんが、まあとにかく2部作りましょう。

コードサイニング あり・なしの違い

誰でも作れるコードサイニングなしのアプリと付与したアプリでは、インストール時のUAC表示がこのように異なります。インストール自体に支障は無く、違いはたぶんこれだけ。

うちで配布するアプリはハードウェアの内部設定にしか使わないおまけ的なものですが、それでも“不明な発行元”なのはちょっとかっこつかないので、手間とお金をかけてコードサイニングを取得しています。

コードサイニングは期限内であればどれだけ署名しても定額です(契約によっては一定の回数制限あり)。アプリごとに料金がかかったりもしません。署名済アプリは有効期限が切れてもその注意が表示されることは(たぶん)ありません。

コードサイニング業者を選定

3年前に3年$200弱で契約したCodeSignCertが今は3年$700弱と爆上がりしており、さらにUSBトークン(暗号化キー)の送料代金($80)が必要とのこと。更新で10%引きクーポンが使えるとは言え、年に数台しか出荷しない製品付属アプリのコストとしてはちょっと厳しい。

そこで先のサイトを参考に、Certumの“Standard Code Signing – set”にしました。3年分の料金とUSBトークンで$429、送料が$66(クレジットカード明細では合計79,714円)。これに消費税と運送業者の立替手数料計9,580円が追加され合計89,294円でした。円安がつらいですね。次回更新時からは$399/3年になる予定です。

消費税と立替手数料はUSBトークン受け取り時に支払われるため、輸入する品物が無い、暗号化にクラウドを用いる(?)“Standard Code Signing in the Cloud”の$459の方が直近の支払額は低くなるでしょうが、消費税の申告をしないと脱税かもしれません。なんとなく仕組みがまんどくさそうという理由でこれは選びませんでした。

なお以前はInternetExplorerの特殊機能(?)で電子証明書をインストール(?)していましたが、今やIEが無いですし、PC外部の証明書を使わねばならないような制限ができたのかもしれません。

コードサイニングを屋号で申請

準備

屋号で申請するためには、世界標準の企業コード“D&B D-U-N-S Number”(以下DUNS)と、その所有者を英語で証明する書類の2点が必要です。後者はパスポートを使いました(このためだけに期限切れを更新)。先サイトによるとパスポートの住所(県名)の確認があったとのことなので、本籍が他県の場合、パスポートの利用は面倒かもしれません。

DUNSは企業だと登記情報から勝手に登録されるようですが、そんなものない個人事業主は自ら申請が要ります。手数料3,300円と開業届けなどの書類(画像データ)を送ると1週間ちょっとで登録可能。企業情報ということで店舗や事務所がセットなイメージですが、住所があれば建屋は特に関係ありません。うちは表札に小さく屋号が書いてあるだけの自宅です。

>> 東京商工リサーチ D-U-N-S Number

申込

Certumウェブサイトから“set”(USBトークンセット)を申し込むと1週間弱でICカードとUSB ICカードリーダーが届きます。SIMのような部分は手でちぎれそうですが表面フィルムが伸びて金属パッドを破壊しそうになったのでニッパーを使うべきでしょう。カードリーダーのふたを外してこれを組み込んだものをUSBトークンと呼ぶようです。

なお申込時に法人か個人か選びますが、電子署名に記す情報とは直接関係ないので個人名での申込で大丈夫。法人だとVAT ID(付加価値税登録番号)の入力欄があり面倒です。

なお屋号に関連するドメイン名のメールアドレス(cocoa.ne.jp)を登録し、USBトークンの発送先名を屋号にしたことはスムーズな審査に多少影響したかもしれません。

USBトークン到着を待つ間、CertumのMy Accountページ“Data security products”から電子署名の情報やDUNS、パスポート写真、本人の顔写真などを送り、審査を進めます。見落としたのかこのあたりの説明がなく、CodeSignCertの時のようにメールで問合せが来るのかと思いしばらく待ちぼうけでした(CodeSignCertはCOMODO JAPANが日本語で対応してくれたので楽でした)。なお顔写真は横向いたりと指示が多いので、登録URLをスマホに送りそこから撮影するのがいいでしょう。

Data security productsを開くとこのような表示が出る場合、ウェブブラウザのウインドウサイズを広げれば解決します。よく見れば解像度がどうとか書いてありますが悩みました。

USBトークン設定時にPINとPUKの2つの数字を設定させられます。違いは、PINが署名時に毎回入力する番号(なので長いとまんどくさい)、PUKはPINを忘れたときの復帰用番号だと思います。

登録時、暗号強度 RSA 3072か4096か選ばされます。なんとなくつよつよな4096にしましたが、これまで使っていたRSA 2048(今は選択不可)より署名時間が明らかに長いので、3072でよかったかもしれません。

そんなこんなで Activate certificate をクリックすれば署名情報がUSBトークンに書き込まれ(たぶん)、完了です。

署名の仕方

最初に書いたとおり詳しくないのでうちでの方法を簡単に。

署名ツールのMicrosoftのsigntool.exeを入手します。覚えてないので方法は検索してください。

インストーラーの作成に、Visual Studioの[機能拡張の管理]から入れられる“Microsoft Visual Studio Installer Projects 2022”を使っています。アプリのInstallerプロジェクトの“PostBuildEvent”にsigntoolを使ったコマンドを設定しておくとインストーラービルド時に署名が行われます。署名はアプリ個別にしなくていいみたい。

コマンドは、さっきのUACのものなら次の感じ。signtoolはパスを通すかフルパスで。繰り返しますが詳しくないので“動いているから使ってる”レベルです。

signtool.exe sign /n "Cocoa Systems" /t http://time.certum.pl/ /fd sha256 /d "Flatshifter Connector セットアップ" /du "https://www.cocoa.ne.jp/" /v "$(BuiltOuputPath)"

signtoolのコマンドが通るとPIN入力画面が出て、設定済みの数字を入れればコードサイニングされたインストーラーの完成です。もちろんこのときUSBトークンを挿しておいてくださいね。