個人開発者でも出来るコードサイニング証明書によるWindowsアプリの署名

Share
個人開発者でも出来るコードサイニング証明書によるWindowsアプリの署名

個人開発者でも出来るコードサイニング証明書によるWindowsアプリの署名

Certumの証明書を購入してアプリを署名するまでの手順

先に英語で書いてから日本語に訳しています。元記事は “Code signing certificate for indie developers” をご参照ください。

こんにちは、個人アプリ作家のTAKUYAです。InkdropというSaaSでご飯を食べています。現在のビジネス規模だと個人事業主としてやったほうが生活がシンプルに保てるので、まだ会社化していません。僕のアプリはInkdropというMarkdownノートアプリで、macOS、Windows、Linux、iOSやAndroidで動作します。最近のOperating Systemsは積極的にMaliciousなSoftwareからユーザを守る機能を搭載しています。macOSではApp Store外で配布する際はアプリを自分でNotarizeする必要があります。それは特に難しいことではありません。なぜならAppleが基本的に必要なものを提供してくれるからです。一方Windowsでは、Microsoft Store外で配布する際には、自分でサードパーティのCode Signing Certificateを購入して署名しなければなりません。もし署名しなければ、以下のようなWindows SmartScreenの警告がユーザの画面に表示されます:

Windows SmartScreen warning

これは困ります。警告は十分なボリュームのダウンロードが得られれば、Code Signing無しでも消えます。しかし、新しいバージョンをリリースすると再び表示されます。それはあなたのビジネスにおいて著しくConversion Rateに影響を与えるでしょう。なので、僕は自分のアプリ用にCode Signing Certificateを購入して署名しました:

本記事では、どのようにしてCode Signing Certificateを購入して署名したのか、一連の手順を説明します。英語での情報も少ないし日本語の情報は皆無だったので、きっと役に立つかと思います。ただし、実際の手続きにあたって英語の読解力は必須です。何か問題があれば英語でメールのやりとりは不可避です。ご注意下さい。

個人開発者はEV Code Signing Certificatesを購入できない

ここでの個人開発者とは、主に会社を持たず個人で活動している人とします。EV(Extended Validation) Code Signing Certificateを利用すれば、SmartScreenから即座の評価を得られます。しかしそれは企業のみに許されており、個人開発者は入手できません。しかもとても高価です。一方で、Standard Code Signing Certificateなら個人でも購入できることが分かりました。それは即座の評価は得られませんが、バージョンをまたいで評価を蓄積できます。つまり、一度十分なダウンロード数を稼げば、証明書の更新までSmart Screen Warningは表示されなくなります。

最近、CrystalDiskMarkで有名なhiyohiyoさんのブログ記事を見つけました:

オープンソース開発者向けコードサイニング証明書
米GlobalSginに続き、グローバルサイン(日本法人)も個人開発者向けのコードサイニング証明書発行を止めてしまったので、次はどうしようかと思案していたわけですが、 Certum Opensource Code Signing を参考に…

調べてみると、Certumというポーランドの会社が個人向けにも安価なCode Signing Certificatesを提供しているようです。興味深いことに、SimplySignというクラウドサービスを使うと、物理USBトークン無しでモバイル機器を使って認証できるようです。面白い:

Standard Code Signing in the Cloud
Are you a developer of software that you offer online? Do you want to enable your customers to reliably identify your…

コストは €189.00/yr で、Affordableです。これを購入してみました。hiyohiyoさんの記事の通り、オープンソース向けの証明書も更に安価に提供しています。Virtual Machineでも動くかどうか心配だったのですが、人柱になる覚悟で実際に試したところParallels上で無事動きました。ただし公式には対応していないので、やる方は自己責任でお願いします。

証明書の購入

Certum shopで証明書を購入したら、上記のようにOrder Itemが表示されます。“Activate” ボタンでアクティベーションを開始します。

Activation wizard

Click “Next”.

4096-bit key長を選びました。次の画面で、申込者と証明書の情報を入力します。確認画面で、以下のようにVeritication methodを聞かれます:

ここでは “automated identity verification” を選択します。

Submitしたら、ステータスが “Awaiting activation” に変わります:

そしたら、あなたのIdentity Verificationが自動で開始されます。

Identity verification

以下のようなメールが届くはずです:

あと、本人確認にどんな書類が必要か書かれたメールも別途届きます。Verification processについての公式ドキュメントは以下にあります:

Verification process of CS Certificate >> Support | Certum
The issuance of the EV Code Signing certificate requires verification of the identity of the Subscriber and of the…

要するに本人の存在と、住所の証明が英語で必要です。僕の場合は以下のドキュメントを送信しました:

  • パスポート
  • 英語表記の残高証明書 (e.g., ゆうちょ銀行は住所表記付きで英語で発行してくれます)

問題なくうまく行きました。数時間で通りました。彼らがチェックしている間のステータスは:

Regaining access to the SimplySign service

SimplySignサービスの利用を開始するために認証します。彼らが公式のビデオを提供しています。割とわかりやすい:

6-digit secret tokenとQRコードがメールで送られてきます。僕はiOS版SimplySignをインストールし、スキャンしました:

するとアカウントがアクティベートされます:

Order Statusが以下のように変わりました:

Looks nice.

How to use the certificate

まずデスクトップ版のSimplySignをインストールします:

SmartSign for creating and verifying electronic signature
The renewal allows to extend the validity of the certificate Code Signing. Log in to your user account and check the…

モバイルアプリで発行されたトークンを使ってログインします:

するとSimplySignの通知が出ます:

自分の証明書を確認するには、タスクバートレイのアイコンをクリックしてメニューを選びます:

ほんまにWindowsにインストールされているのか確認するには、certmgr.msc を起動して Certificates -> Personal -> Certificates を選択。

Sign your app

公式マニュアルはこちら。ここではsigntool.exe を使います。Windows SDKにバンドルされています。コマンドは C:\Program Files (x86)\Windows Kits\10\bin\10.0.19041.0\x64 にあるはずです。もし“signtool is not recognized”というエラーが出たら、%PATH% 環境変数に通してあげましょう。以下のように signtool を実行します:

❯ signtool sign /debug /n "<YOUR CERT NAME>" /t http://time.certum.pl/ /fd sha256 /v <FILENAME>

例えば、僕のElectronアプリのインストーラーの署名は:

❯ signtool sign /debug /n "Takuya Matsuyama" /t http://time.certum.pl/ /fd sha256 /v .\Setup.exeThe following certificates were considered:
Issued to: Takuya Matsuyama
Issued by: Certum Code Signing 2021 CA
Expires: Fri Aug 23 09:00:00 2024
SHA1 hash: ****************************************After EKU filter, 1 certs were left.
After expiry filter, 1 certs were left.
After Subject Name filter, 1 certs were left.
After Private Key filter, 1 certs were left.
The following certificate was selected:
Issued to: Takuya Matsuyama
Issued by: Certum Code Signing 2021 CA
Expires: Fri Aug 23 09:00:00 2024
SHA1 hash: ****************************************Done Adding Additional Store
Successfully signed: .\Setup.exeNumber of files successfully Signed: 1
Number of warnings: 0
Number of errors: 0

もし /n パラメータがおかしいと、以下のようなエラーが出るでしょう:

SignTool Error: No certificates were found that met all the given criteria.

これでアプリが署名できました。やったね!おめでとう。確認するには:

❯ signtool verify /pa .\Setup.exe
File: .\Setup.exe
Index Algorithm Timestamp
========================================
0 sha256 AuthenticodeSuccessfully verified: .\Setup.exe

これでSmartScreen警告が出る時、Publisherには以下のように表示されます:

“Publisher: Unknown”と表示されるより1万倍良いですね。これで十分なダウンロード数が得られれば、最終的には警告が消えるでしょう。

When got a new iPhone, how to migrate

もしiPhoneを機種変更した時はどうするのという疑問があったので調べました。このドキュメントに書かれていました:

Resetting the access to the service
Resetting the access to the service consists in contacting the Certum Help line in order to submit a request for service access reset. The employee of the Certum Help line performs the access resetting process by verification of personal details of the User requesting the reset of the access to the service. The User’s data contained in their Application for qualified certificate submitted in the Certum system are verified. After correct verification, the User receives a 6-digit code, the so-called secret, from the Certum Operator. Certum sends a one time link for resetting the service access to the e-mail address, which is the User’s ID in the SimplySign System — the link is valid for 24 hours from the moment of its generation in the SimplySign system. The User receives the e-mail message, clicks on the activation link and is directed to Certum website, where they are asked to enter the 6-digit secret. Depending on the reset method, when a secret is entered and the Send button is pressed, the User obtains either the so-called QR Code called a photocode or the so-called 16-character resetting code. After receiving this data, do not close the browser but proceed to the next step of resetting the access to the service.

要するに、Certumに問い合わせてアクセスをリセットしてねとの事。

参考になれば幸いです。

Read more

個人開発で日本から海外へ、10年間の歴史 — ひろしさんとの対談(前編)

個人開発で日本から海外へ、10年間の歴史 — ひろしさんとの対談(前編)

数週間前、ひろしさんのポッドキャストにゲストで出演しました。お互いの長い個人開発の経験について語り合いました。英語版を作成する過程で、日本語でも綺麗に整形した書き起こしが出来たので、こちらに掲載します。お楽しみください。 ※ギアアイコンをクリックして、音声と字幕を日本語に変更できます。 00:00 イントロ:TAKUYAさんようこそ 01:32 TAKUYAさんの自己紹介:WalknoteからInkdropまで 04:54 独立への踏み切り方:慎重派と勢い派 06:51 個人開発がフリーランス案件につながった 09:17 Inkdropで食えるようになるまで 12:15 なぜ最初から海外市場を狙ったのか 14:54 AI登場前、英語コピーに苦戦した話 16:18 AIバイブコーディング時代をどう見ているか 17:24 全てのコードを一行ずつレビューする使い方 21:06 AIは新幹線:速さの先にあるもの 25:53 AI時代に「感性」が大事になる 27:

By Takuya Matsuyama
「一汁一菜」にAI時代の生き方が詰まっている

「一汁一菜」にAI時代の生き方が詰まっている

どうも個人アプリ作家のTAKUYAです。 今回は、AI時代を開発者・クリエイター・表現者としてどう健やかに生きるか、について考えていることをシェアしたいと思います。ここでの「健やかに生きる」とは、心身の健康を保ちながら、ものづくりを楽しみ続けるという意味です。 読者の中にも、最近のAIの急速な進化の中でどう生き残り、さらに活躍していくかを悩んでいる方は多いのではないでしょうか。正直、すべてに対する正解はわかりません。未来を正確に予測できる人はいないからです。 でも自分は、ソフトウェア寄りのアーティストとして生きる上で大事なのは、「戦略」や「堀(moat)」を築くことよりも、「生きる方向性」 だと思っています。 人生とは速度ではなく方向である – ゲーテ 自分はどこに行きたいのか?何を見たいのか?それが大事です。戦略は状況に合わせて柔軟に変えればいいからです。 今回は、日本の文化からいくつかの生き方の原則を探ってみたいと思います。 最近、料理研究家の 土井善晴 さんの 「一汁一菜でよいという提案」 を読んで、日々のリズムを健やかに保つためのヒントがたくさん詰まっていると感じまし

By Takuya Matsuyama
Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

Claude Codeをtmuxのポップアップウィンドウで継続的に走らせる方法

💡本記事は英語ブログの日本語訳です。 どうも、TAKUYAです。 AIコーディングでは専らClaude Codeを使っています。最初はtmuxでターミナルの右側にペインを分割して使っていたのですが、幅が狭すぎてメッセージやdiffがまともに表示できず、使いづらかったです。 <Prefix>+zでペインを最大化すればいいのですが、毎回やるのは面倒でした。 そこで、ポップアップウィンドウでClaude Codeを起動するようにしました。キーバインドを押せばセッションが開き、閉じてもバックグラウンドで動き続けるので、すぐに再開できます。 この記事では、それを実現するためのtmuxの設定方法を紹介します。 動画で見る(英語): ポップアップウィンドウはサブプロセスを維持できない tmuxのdisplay-popupコマンドを使うとポップアップウィンドウを表示でき、ちょっとしたツールにすぐアクセスするのに便利です。 僕はlazygitでgitの状態をサッと確認するのに使っています: bind -r g display-popup -d '#{pane_current_path}'

By Takuya Matsuyama
Keychron K2 HEを無刻印化する手順

Keychron K2 HEを無刻印化する手順

どうもTAKUYAです。KeychronさんにK2 HEをお願いしたら音速で送ってくれたので、無刻印化してみました。どうやったのか過程をシェアします。 Unboxing 上はKeychron Q1です。これは3年間ぐらい使ってきました。キーキャップが若干くたびれていますね。でも問題なく今まで使えていました。そろそろ飽きてきたので新しいキーボードを試したいと思い、前から気になっていたK2 HEを試すことにしました(写真下)。 Amazon | 【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、2.4GHz・Bluetooth無線対応、QMKプログラム可能、アルミ+ウッドフレーム、USレイアウト、RGBライト、Mac Windows Linux対応 (ブラック) | Keychron | パソコン用キーボード 通販【国内正規品】Keychron K2 HE ラピッドトリガー ワイヤレス カスタムキーボード、ホールエフェクトGateronダブルレール・マグネットスイッチ、

By Takuya Matsuyama