Share via


デジタル署名にはまる

ActiveX や VBA が埋め込まれた図面やテンプレートを開くとセキュリティ警告が表示されますね。表示しないようにもできるのですが。既定の設定をいじらなければマクロを有効にするかどうか、ここで選択することになります。危険なマクロの実行を防ぐためにもこのようにワンクッションをおいて確認するデザインは仕方ないかと思いますが、さすがに自分や社内で作ったものを起動して、毎回この画面をみるのは面倒かもしれません。

そこで利用するのがデジタル署名です。コードやコントロールに署名を設定し、所在を明らかにすることで、信頼できるか否かを判断しようというものです。うまく使えばセキュリティ警告を出さずに、安全にマクロを実行できます。
一番簡単な署名は自己署名入りのデジタル署名を作成し、図面に設定する方法です。

Visio をインストールすると、VBA プロジェクトのデジタル署名、というツールがインストールされます。起動するとすぐに証明書を発行できるので、自分の名前や会社名が入った証明書を作成しましょう。1 クリックで作成が終了します。

次に、図面のマクロ プロジェクトを開き、ツール メニュー内のデジタル署名を選択します。ここからは簡単ですね。選択をクリックすると先ほど作成した証明書が表示されるので、それを選択すれば設定は終了です。

その図面を開くと、セキュリティ警告が表示されますが、証明書の情報と、信頼するかどうかを選べるようになります。信頼する、と選択すれば、その証明書で署名されたマクロについては今後警告が表示されなくなります。便利ですが、いきなりマクロが自動実行されることがあるので、開発中は使わない方がよいと思います。設定した信頼情報は、Visio のセキュリティ設定画面で解除することもできます。

また、この方法で作った署名は誰でも作れるわけで、知人の名前が表示されているからといって 100% 信頼することはできません。自分の作ったマクロの管理くらいにしておいたほうがよいでしょう。

証明書の信頼度を確認するには、社内ネットワーク内に証明書サーバーを構築する方法がベストでしょう。社内ネットワーク内ならこの証明書を信頼できます。MSDN にもこれ関連の情報はたくさんでているので検索してみてください。英語ですがこちらも参考になると思います。
https://msdn.microsoft.com/office/understanding/officesystem/default.aspx?pull=/library/en-us/dnsmarttag/html/odc_dcss.asp

さて、先日図面に署名を設定しようとしていて、重大なことに気がつきました。Signcode.exe というツールでバッチ処理をしていたのですが、何度やっても失敗します。Word や Excel のファイルは問題なくできるのに…。

その後、時間をかけて Visio の仕様を調べてようやくわかりました。
Visio のバイナリ形式のファイルは Signcode で署名設定できません。その代わり XML 形式を使います。バイナリ形式でファイルをリリースしたい場合は、署名設定の前後で XML とバイナリ形式の変換をおこなう必要があります。
もう一点、署名したファイルのマクロが動かなくなることがあります。そんなときは署名前のファイルの VBA のデバッグ メニューでコンパイルを実行してみてください。ここでコンパイル エラーがでるコードは署名設定後動かなくなったり、設定に失敗することがあります。

<担当: M>
この投稿は現状のまま何の保証もなく掲載しているものであり、何らかの権利を許諾するものでもありません。マイクロソフト社員による発言やコメントは、マイクロソフトの正式な見解またはコメントではありません。