ブラウザに電子デジタル署名を実装する必要性に少なくとも一度遭遇したことがある人は、これが開発者、特にオープンスタンダードに慣れているWeb開発者にとっての頭痛の種をよく知っています。ユーザーがどの軸を持っているか、その他のウェブの楽しみを気にしません。
実際、今日のブラウザーでのEDSの状況は、数年前ほど悲しくはありませんが、理想からはほど遠いものです。 また、このトピックはHabreで何度か取り上げられました(例: hereおよびhere) 。
カットの下には、問題自体、この問題をどのように解決できるか、私がそれをどのように解決したか、そしてベラルーシでのEDSについての個人的な印象についての物語があります。
問題の本質と明日何が起こるか
問題はささいなことです。ブラウザのクライアントにデジタル署名を実装しますか。このためにお気に入りのJavaScriptを使用することを考えてください。 ブラウザーは証明書、トークン、署名などを操作するためのAPIを提供していないため、何も起こりません。 など...このメカニズムは、Web開発者の夢の中でどのように見えるべきでしょうか? おそらくこのようなもの:
// window.crypto.getCertificates(options); // - window.crypto.signText(text, options); ...
はい、これがすべて国内のGOSTをサポートすることも素晴らしいことです...まあ、私はそれについて本当に夢を見ました。 残念ながら、最新のブラウザではこのようなものは見つかりません。 もちろん、 Mozillaで同様のものを実装しようとするti病な試みがありますが、記事のタイトルの警告は非常に悲しいものです。
ところで、誰かがこのAPIを使用しようとした場合、登録解除は非常に興味深いです。
W3C リポジトリにはCryptoに関する言及もあります 。 ほとんどの場合、そこで作業が開始されたのはそれほど前のことではなく、そこにはあまり資料がありませんが、最後の更新は最近であったため、作業は進行中です
このすべてが思い浮かぶかどうか、そして最も重要なことは、これが起こったとき、今日、おそらく誰もあなたに話さないでしょう。 では、今ここで必要な開発者には何が残っていますか?
松葉杖
すぐに予約したいのですが、ブラウザのEDSは、おそらく開発者がさまざまなトリックや松葉杖を使用することを余儀なくされる数少ないケースの1つです。最も人気のあるものをリストします。
それぞれの欠点を見てみましょう、私は利点を説明しません、私見、すべての松葉杖のために、それは一つのことを持っています-「それは、うまくいきます」。
Activex
ブラウザで電子デジタル署名を実装する必要がある99%のケースで使用され、銀行、取引所、その他の深刻な組織はそれを使用することにshしていません。 私の意見では、今これが最悪の選択肢です、なぜですか?
お気に入りのFFやChromeを使って仕事に慣れていますか? -忘れて! ActiveXはIEでのみ機能します。
ブラウザの設定を詳しく調べませんか? -そして、あなたはしなければなりません! すべてが機能する前に、IEのセキュリティ設定を深く掘り下げる必要があります。
それとも、あなたはWin7、さらにはx64を持っているほど高度なのでしょうか、それともIE9-10を自分用にインストールしたのでしょうか? -非常に無駄で、おそらく成功しないでしょう。
冗談ではありませんが、MicrosoftはCAPICOMのサポートが終了し、コンポーネントのさらなる開発はないと発表しました。正式にサポートされているCAPICOMの最新バージョンはWindows Vistaにありました。
ブラウザプラグイン
ブラウザに何かがなくても本当に必要な場合は、解決策があります-プラグインを作成します。 ここでの主な問題は、これをすべてのブラウザーで機能させるには、それぞれのプラグインを作成する必要があることです。 サポートの問題はまだあります-プラグインが新しいブラウザーバージョン(または古いバージョン)で動作することを保証する人はいません。Mozillaが加速バージョンリリースに切り替えたときのFFの状況を思い出してください。 まあ、少なくともこのプラグインをインストールする必要があるという事実には別の問題があります。 このソリューションの詳細については、 こちらをご覧ください 。
Javaアプレット
すべてがそれほど悪くないようで、コードは一度書かれ、すべてのブラウザで動作し、何も設定する必要さえありません。 ただし、JREがインストールされていない場合、何も起こりません。 ほとんどの場合、 OpenSSLと連携して動作しますが、JNIを使用すると、多くのことを台無しにすることができます。 はい、すべてが機能するには、アプレット自体に署名する必要があります。
トンネル
プロキシの原理に基づいて機能する比較的新しい方法の主なアイデアは、特別に生成されたPOSTリクエストがトンネルを介してサーバーに送信されると、このリクエストからのデータに署名し、データの代わりにリクエストフィールドの署名されたデータを置き換え、すべてがさらにサーバーに送信されることですそして、デジタル署名からのデータがすでにあります。 原理は非常にシンプルですが、効果的です。 このメソッドには実用的な実装があります。 詳細はこちら 。 これがすべて機能するためには、トンネル自体をクライアントにインストールする必要がありますが、フラッシュドライブから開始することもできます。
ご覧のとおり、解決策はありますが、それぞれに一定の制限と予約がありますが、さまざまなオペレーティングシステムでの作業、GOSTのサポート、モバイルプラットフォームでの作業などの問題には意図的に触れませんでした。これはさらに重要な問題です。
個人的な経験
はい、私も、ブラウザでEDSの実装に従事したことは「幸運」でした。 私自身は、ソフトウェア開発に関与するミンスク企業の1つで働いており、かつてはいずれかのシステムのブラウザーでデジタル署名のサポートを緊急に実装する必要がありました。 率直に言って、最初はこの状況で99%のように行動し、ActiveXを使用したかったのです。 しかし、徐々に問題に突入し、私はこれが最初にユーザーにとって、次に開発者としての私にとって頭痛の種になることがわかってきました。 ブラウザごとにプラグインを作成する時間はありませんでした。 Javaアプレットとトンネルの2つのソリューションが残っていました。 それは決定的であることが判明しました...あなたはそれを信じないでしょう、GOST。
実際、ロシアのように、ベラルーシでは電子デジタル署名の生成と検証の手順に独自のGOSTを採用していますが、わが国ではSTB RB 1176.2–99と呼ばれ、RSAはありません。 GOSTをすべての国に提供してください! また、ロシアのGOSTに対して上記の各方法の実用的な実装がある場合は、いずれかを選択できますが、ベラルーシの開発者はそれほど幸運ではありませんでした。 この機会に、私は自分の国で暗号化ソフトウェアを製造している会社の代表者と個人的に話をしました。 会話は二重の印象を残しました。 人々は非常に適切であり、問題を理解していますが、これは彼らの仕事ではない、彼らはおそらくすべての州の基準を満たし、州の専門知識に合格した暗号プロバイダーを書いたと言い、あなたがそれをどのように使用するかは彼らの問題ではありません。
-ActiveXの使用のみを提供できます。
「まあ、彼に関連する問題はどうですか?」
-もちろん、Javaアプレットを使用した特定の開発がありますが、製品としてまだ提供できません。 この種のソフトウェアの開発は私たちの仕事ではありません。
私の意見では、製品を提供するとき、そのための環境を提供することは商業的に利益があるので、これは非常に正しい位置ではありません。
まあ、大丈夫、私たちは持っているもので作業します。 何がありますか? 以前、EDS関数を使用するデスクトップアプリケーションが当社で作成され、 CryptoAPIで直接動作するコンポーネントがありました。デルファイで作成されました。 時間を無駄にしないために、同僚や私自身のこの経験をどうにかして使いたいと思っていました。 しかし、それを行う方法は? デルファイとWebアプリケーションのコンポーネントを接続しますか? 図の答え:
何が起こっているのか簡単に説明してください。 何かに署名する必要があるときは、javascriptを使用してアプレットのjava関数を呼び出します。
document.CryptoAPI.sign(text);
次に、アプレットはソケットを介してデスクトップアプリケーションと通信し、必要なパラメーターをそれに渡し、アプリケーションが要求に署名し(このために以前に作成した同僚のコンポーネントを使用する)、署名されたデータをアプレットに渡します。機能:
function signResult(params) { //- }
アプレットとアプリケーション間の通信用にシンプルなプロトコルが考案され実装されました。残りは非常にシンプルであることが判明したため、おそらくほとんどの時間を要しました。 欠点は一般的です。JREの存在と、どこかからインストールまたは起動されるデスクトップアプリケーションです。 この方法についてのコメントを聞くのは興味深いでしょう。
上記の情報が、ブラウザのEDSの問題をよりよく理解する人々に役立つことを願っています。