前回、送信データの改ざんを検知する為、簡易的なセキュリティトークンであるPKCS#12形式のファイルを作成しました。Thing開発用のPKCS#12ファイルをOpenSSLで出来るだけ速く作るhttps://one-it-thing.com/5624/「電子署名法」に則るにはセキュリティトークンが必要で、デジタル署名をちょっと試したいケースならPKCS#12が手っ取り早いです。今回は可能な限り速く、開発に使えるテスト用のPKCS#12ファイルを作ります。OpenSSLが入っているなら以下の4コマンドで作れます。opens...今回はクライアントとサーバの二者間でデータが改ざんされていないことを確認する為、ブラウザ(Javascript)で送信データの署名値を作るJava(サーバ想定)で署名値を検証する上図が可能か検証していきたいと思います。まとめブラウザ単体でp12ファイルを使えるかどうか調べる大抵の言語ではp12ファイルから秘密鍵、証明書(公開鍵)を取り出すコアAPIやライブラリが在りますがブラウザ上のjavascriptではどうなのでしょうか。API」を使うとライブラリ無しで鍵ペアの生成、署名、検証をすることが出来ます。インターフェイスは、暗号プリミティブのセットを表します。プロパティを通して利用できます。残念ながら、PKCS#12ファイルに入っている鍵や証明書にアクセスする機能はありません。鍵と証明書がブラウザメモリに展開されている状態ならこのAPIで問題ありませんが、今回のニーズには適いません。暗号化JSライブラリのForgeはRSA、証明書関連の操作を概ね網羅しています。digitalbazaar/forge同名のライブラリが複数ある為か、npmリポジトリでは「node-forge」と言う名前で公開されています。同じことが出来そうなJSライブラリと比較してみるとダウンロード数が段違いですね。ライセンスもBSD(3-Clause)とLGPLのデュアルで使いやすいです。ursaこれを採用してブラウザ上でp12ファイルを使った署名値作成をしてみます。一枚っぺらのindex.htmlで公式を見ながら実装してみます。</body></html>HTTPサーバ経由で動作を検証ブラウザの暗号化機能はHTTPS環境かlocalhostのHTTPサーバ経由でないと動作しません。Webサーバに載せるか、npmが使えるならhttp-serverでも入れてローカルホストでHTTPサーバを起動します。http-server実行結果http://localhost:8080にアクセスし、前回作成したforTest.p12を読み込みます。ブラウザの開発者コンソール実行結果。0f9204d63178e6098d4b9557cd4a06ecad293dee306a27f553b9dc6ef9b2187b27ba95a84d5cce697ccd19c54a24e5ca8e3069a38762fc318c50bba6e7f1c8c691b29d775a5a6ccc9069abf598b42cc9369359c81425f7efacb7ed51e101bdfed1d2d7d79cd47894363f4c0efb524081fbc47c8f2ecd51958339c9ad7592d7d991ee363199d858ab704f431b49aa6a74de898ea83909654d466e666caccd5621fd8739c20add6323ce5e95459d8c3000dbffbaadb13d3c3629e4af966ae3b5d2a0509661fa2d87081eac9451cc79b571824fdc2a21f752762457f59090ec5490e592ac36e9eac4b4171722429bd97193476ef4ab6b69d2e895a11c9bef5dcd78true署名値を16進文字列で出しましたがBase64でやりとりするのが一般的かと思います。公開鍵による署名値検証も成功しています。・・・成功していますが、単一ホストで署名値の正しさを検証しても意味が無いので、次はForgeで生成した署名値をJavaで検証してみます。Javaで署名値を検証お好きなIDEで以下を実装。公開鍵をロードする為、プロジェクト直下にforTest.p12を置いておきます。署名値を公開鍵で復号して出来た送信前のハッシュ値が等しく、送信されたデータが改ざんされていないことが分かりました。試しにJavaソース上の「送信されたデータ」を変えてみると、署名値検証はfalseになり、受信時のデータが送信時と比較して改ざんされていることを検知出来ます。DSigやJWT(証明書チェーンはx5cヘッダキーを使用)といった方式で行います。p12ファイルは電子ファイルなのでセキュリティトークンとしては弱く、現実世界ではICカードが主に使われる為、開発したシステムに正式に取り入れることは少ないかも知れません。ICカードはカードベンダに協力して貰わないと何種類も用意出来ませんし、証明書の期限切れなどのテストをする場合はp12ファイルで代替が効いたりします。電子署名という仕組みを勉強する際にもp12はうってつけです。インターネットで全てが完了する時代に向けて「電子署名法」も変わっていくと思われますが、PKCS#12ファイルを使って基本を実装出来るようになっておけば知識の追従は楽になりそうです。security-RSA執筆者:sin7k24関連記事CentOSで暗号鍵用のパスワードを生成そこそこ長くて文字種の入り混じった強度の高いものを自分で考えるのは面倒です。暗号化処理を使う際に必要なパスワード文字列を、mkpasswdコマンドでいい感じに生成出来るようにしておきます。...CentOS7にOpenJDK11をインストール、alternatives後の再ログインでJAVA_HOMEも自動変更OpenJDKはCentOS-Baseリポジトリのupdatesに登録されているので新規yumリポジトリ追加は不要です。...優秀なJava開発者になる為の10のステッププログラミングで生計を立てるなら企業ニーズの多いJavaはリターンの多い言語ですから使えるようになっておいて損はありません。PayのWeb決済を開発する為にSandboxテスターを作ってiPhoneに設定2020/01/10Android版ChromiumをVirtualBoxにインストールしたUbuntuでビルドしてみるプロフィールshingo.7k24東京在勤、職歴20年越え中年ITエンジニアです。開発現場で頑張っています。19歳(1996年)から書き始めた個人日記が5,000日を超え、残りの人生は発信をして行きたいと思い、令和元日からこのサイトを開始しました。勉強と試行錯誤をしながら、自分が経験したIT関連情報を投稿しています。私と同じく、今後IT業界で生計を立てて行きたいと考えている方や、技術共有したいけどフリーランスで孤独、といった方と一緒に成長、知識共有して行けたら楽しいな、と思っています。