はじめに
Excelマクロには認証機関発行の証明書を付与しておけば、あの面倒なマクロ表示時の警告メッセージは表示されないものと思っていました。
しかし、現時点においては誤った認識であり、認証機関発行の証明書であっても警告メッセージは外せないことがわかりましたので、ここに記載したいと思います。
認証機関から証明書を購入
Excelマクロを作って配布すると、配布先で起動時に警告メッセージが表示されますね。
「コンテンツを有効化」をクリックしてもらえれば信頼ドキュメントになるので、次回起動からはすんなり動いてくれますが、更新(VBA部分が)されてしまうと、再度警告表示がなされるという面倒なものです。
マクロに悪意ある動作が組み込まれていることもあるので、このように慎重になるのは仕方ないことかもしれませんが、コンピュータ・リテラシーのレベルによっては、不要な説明や対応が面倒なので認証機関から証明書を購入してみました。
これまでの対策は?
マクロ警告を迂回するには、次の方法が用意されています。
(1)起動時警告の「コンテンツを有効化」ボタンをクリックする
ボタンクリックにて信頼ドキュメントになり、マクロが動作します。
信頼ドキュメントはバージョン管理されているので、ファイルを更新(VBA部分に関し)すると、次回起動時に再度警告表示がなされます。
一過性のものと理解ください。
設定はユーザ単位です。(ADなどで禁止になっている場合もあります。)
(2)信頼出来るフォルダに対象物を配置する
Excelのセキュリティー設定画面からフォルダを設定します。
一度設定してしまえば、そのフォルダに入れたファイルは警告なしで動作します。
設定はユーザ単位です。
(3)マクロに電子証明書(自己作成)を付与する
電子証明書は認証局に頼まなくても自己作成可能です。
社内で使用するマクロなどであれば、お金もかかららないので良いように思います。
(4)マクロに電子証明書(認証機関発行)を付与する
やはり認証局から発行して貰うものが信頼度は高いと思います。
筆者がお客さんに説明する場合、マクロ警告には「コンテンツを有効化」をクリックしてもらうこととしたり、事前に信頼出来るフォルダを動作環境に設定して、そちらにファイルを配置の上、起動してもらうようにしてもらっていました。
認証機関発行の証明書で解決...とは行きませんでした
認証機関発行のコード証明書はMicrosoft Root Certificate Program Membersより購入します。
はじめての事なので、日本法人がきちんとある業者に事前問い合わせをして購入しました。
購入手続きはいたって簡単です。ネットで申し込みを行い、所在確認の電話が掛かってくるので、質問に対応すれば数時間後に発行してもらえます。(もちろんお金は払わないとだめですよ)
コード証明書はInternetExprolerでダウンロードして、OSに登録される形で提供されます。
で、早速ExcelのVBA開発画面より証明書付与をしてみました。証明書が入ってしまえば、いくらでも認証出来てしまいます。
ちょっとした高揚感を感じながらの作業です。
作成したExcelマクロ(xlsm)を、他の端末(マクロセキュリティー設定を規定値設定)で起動してみました。
なんと、期待を裏切り見事に警告が表示されます。
ファイル形式をExcel2003形式のxlsに変更しても同じです。
Excel2007で作成したファイルだったので、現在の最新であるExcel2016で作成し、気を取り直して開いてみると、やはり警告が表示されます。
Windows7(64)での動作だったので、Windows10(64)に変更して実施するも同じく警告が表示されます。
警告には詳細へのボタンがあり、こちらを押すと認証局発行の証明書が付与されている旨のメッセージ表示があります。
これを安心安全の印と認識できるのは、そこそこの専門知識を有する者と思われるので、お客さんの不安を解消する機能としては役に立ちません。
じゃあコード証明書から公開証明書を作ってみたら?
それではということで、コード証明書から、公開証明書を作ってみたらどうなるかを試してみました。
公開証明書は、VBAの画面から発行できました。それを動作させたい機器にインストールしてみると、なんと警告なしで表示されることがわかりました。
つまり認証機関発行のコード証明書であっても、そのコードをもとに生成した公開鍵を動作環境にインストールしなければ、警告を迂回することは出来ないとの結果です。
HTTPSにおけるSSL証明書と同様に考えてた筆者は、公開鍵の配布を自ら行う必要ありとの動作に少々困り、日本代理店に問い合わせをしてみました。
コード証明書による無警告実行には公開証明書の事前導入が必要
日本法人の担当の方に相談しましたところ、親身に対応していただけました。
詳細を確認するとのことで数日調べて頂いたところ、次の回答が...
(1)現在のマクロ警告については、認証機関発行のコード証明書であっても、対応する公開証明書が未導入であれば警告表示がなされるようになっている。(どうも近年変わった様子)
(2)公開証明書はスクリプト化して導入出来、ユーザ権限配下のレジストリに格納されるため、導入時に権限上のトラブルは発生しないと思われる。
(3)コード証明書の期限は発行時のものから更新は出来ない。新しいものは発行出来るので、有効期間中に新しいコード証明書を購入し、対応する公開証明書を導入する必要がある。
(4)コード証明書購入の目的が証明書認証にて無警告とすることの場合、返金に応じる事ができる。
日本代理店の方は非常によく対応してくれたため、なんとか用途がないか検討してもたのですが、筆者としては「(3)更新ができない」件がどうにも困り、返金してもらうことにしました。
営業上の影響もあるかもしれないので、日本代理店の会社名の公表は控えさせていただきました。
結局対応はどうすれば良いの?
筆者の対応は、先に記載しました警告迂回方法の中より、「(1)起動時警告の「コンテンツを有効化」ボタンクリック」、「(2)信頼出来るフォルダにて動作」による対処を継続することにしました。
他にこんなのはどうでしょう?
考えたのですが、マクロ警告時の操作方法を書いたシートを準備し、初期表示状態にしておけばどうかなぁと。
もちろんマクロが動作するのであればAuto_Openにて操作方法を記載したシートを非表示化してしまえばと。
サンプルを作ってみました。
こちらからダウンロードできますので、参考にしてみてください。
githubのリンクも載せておきますね。
マクロ警告表示の環境では初回起動に次のようなメッセージが表示されます。
ボタンをクリックしてもらえれば、次回からは表示されなくなります。
実装の一例として参考にいただければ嬉しいです。