当ブログに掲載しているサンプルは、すべて利用者の自己責任という形でお願いします。
ただし、明らかな不具合がある場合、ご連絡いただければ、訂正記事を出します。
また、こちらのサンプルは、別のサイト等への公開、転載は一切禁止しています。
どうしてもと言う場合は、筆者にあらかじめご連絡ください。
記事そのもののリンクについてはご自由に行っていただいてよいです。

テクてく Lotus 技術者 Slack に参加しよう!

2017年4月3日月曜日

IDボールトによる文書の暗号化(4)・・・XPagesで文書を復号化する

皆さん、こんにちは。
ついに4月です。つまり1年の四分の一が終了したことになります。
ダラダラと過ごしていると一年があっという間に終わってしまいそうなので、 気を取り直していきましょう。


さて、今日もXPagesでの文書の暗号化/復号化についてです。
まさか、3月中に終わらせることができずに4月まで引っ張ることになるとは思っていませんでした。
ですが、今回でXPagesでの暗号化/復号化については完結となります。


前回までの記事はこちらです。

IDボールトによる文書の暗号化(1)・・・LotusScriptでIDボールトの情報を取得する
IDボールトによる文書の暗号化(2)・・・XPagesで文書の暗号化/復号化を行う条件
IDボールトによる文書の暗号化(3)・・・XPagesで文書を暗号化する


第4回目となる今日は、XPagesでの文書の復号化についてです。

Notesクライアントの場合はユーザIDの利用が必須になっており、Notesクライアントが自動で処理をしてくれるので、復号化の実装を行う必要がありません。
この辺りは専用クライアントを利用するメリットになりますね。

ただ、難点としてはエラーメッセージがステータスバーにしか表示されないということです。
ステータスバーに表示される復号化エラーメッセージ

ステータスバーは簡易ログになっているので、何かイベントが発生すればその都度メッセージが表示されるため、復号化のエラーに気が付かないこともあります。
また、復号化のエラーメッセージは毎回同じであるため、どの文書を開いたときに発生したのかが分かりにくいというところもあります。
このメッセージを@関数やLotusScriptで制御できればいいのですが、できそうにないのですよね。
せっかくなので、改善してほしいものです。


では、XPagesの場合はどうでしょうか?
公式ドキュメントに
XPage を使用した Domino での文書の暗号化と暗号化解除
というものがありますが、復号化については一切書かれていません・・・

実は復元についての方法は、この連載記事の中ですでに書いてあるのです。

1つ目は、アプリケーションの設定です。
Notes DBの「Xspプロパティ」に
xsp.domino.document.encryption=true

を追記します(すでにこの行があり、値がfalseになっている場合はtrueに変更します)。


2つ目は、dominoIDVaultBeanにサーバ名、ユーザ名、パスワードをセットすることです。

dominoIDVaultBean.setServerName( "IDボールトサーバ名" );
dominoIDVaultBean.setUserName( "Notesユーザ名" );
dominoIDVaultBean.setUserPassword( "NotesユーザIDのパスワード" );


上記のように記述して、直接値をセットしてもよいですし、
あらかじめXPagesの画面でログインをしてことで、サーバ名とユーザ名は以下のコードを実行することでセットできます。
dominoIDVaultBean.setDefaultValues();


※パスワードのセットもできそうなのですが、IBM Dominoの環境設定条件が分からず実現できてません。


この2つの条件をクリアすることで、暗号化された文書をXPagesの画面で参照することができます。

なお、当然のことではありますが、ユーザが文書にセットされているシークレットキーを保有している(NotesユーザID内に格納されている)必要があります。


・・・簡単ですよね。
暗号化の複雑さに比べたら、パスワードの入力だけどうにかすれば、ほとんどコーディング不要で実現できます。

また、復号化できなかった際のエラーメッセージですが、ステータスバーに表示・・・なんてことはなく、XPagesで提供されている「複数エラーメッセージコントロール」で実現できます。
エラーメッセージも自動で設定されるので、どんなメッセージにするか悩む必要もありません。
ここについてはNotesクライアントよりもXPagesの方が親切で良いですね。
復号化エラーのメッセージはエラーメッセージコントロールで実現可能

ところで、1つ目のXspプロパティですが、
UIでは「Enable document encryption for this application」という項目名です。
翻訳すると、「このアプリケーションで文書の暗号化を有効にする」ですね。
ところが、XPagesで文書の暗号化を行うだけであれば、このチェックボックスにチェックする必要はないんですね。
あくまでも文書の復号化を行うのに必要な項目なのです。
なんだかなぁ・・・という感じですよね。



とにかく、これでXPagesアプリケーションで文書の暗号化/復号化ができるようになりました。
XPagesで作成した暗号化文書はNotesクライアントで参照もできますし、逆にNotesクライアントで作成した暗号化文書はXPagesアプリケーションでも復号化ができます。

かなり実用的になったのではないでしょうか。
是非、暗号化機能を試してみてください。




IDボールトを使ったXPagesでの暗号化/復号化については、今回でひとまず完結としますが、実はまだ課題が残っています。

それはパブリックキー/プライベートキーによる暗号化/復号化の実装です。
今回の一連の記事で行ったのはシークレットキーというもので、NotesユーザIDの中に鍵を作り、それを暗号化/復号化に利用するものです。
そのため、あらかじめ鍵を作成して、ユーザに配布するという手順が必要になります。

パブリックキー/プライベートキーの場合、ユーザごとのパブリックキーで暗号化して、復号化する際は各ユーザのプライベートキーで行うというものです。
これなら鍵をわざわざ作成することも、ユーザに配布するということも必要ありません。



実際、iNotesではメール送信時の暗号化機能が実装されています。
ですので、XPagesでもできないことはないと思うのですが、私が作成したサンプルDBでは実行エラーになってしまいます。
どなたか、パブリックキーによるXPagesでの暗号化ができたら、是非実装方法を教えてください。





それでは今日はこの辺で・・・



Notes/Dominoで困ったことがあれば、弊社にお問い合わせください。
IBM Championの私が承ります!
お問い合わせはこちらから→Lotus Notes/Domino カスタマイズとセキュリティ強化 - 株式会社エフ

0 件のコメント: