S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

Applet実行時のセキュリティ警告ダイアログの毎回表示の回避方法

Java 1.7.0_67
自己(オレオレ)証明書で作成されたAppletの挙動がJava7以降変わってしまって、Applet実行時にセキュリティ警告のダイアログが毎回表示されるようになってしまったので、その回避方法をメモ。
但し、元々初回起動時のみの警告ダイアログが表示されており、それと同等の挙動での回避策。

毎回表示されるセキュリティ警告ダイアログ

Appletの証明書ファイルをエクスポート

Appletに付加した鍵から自己証明書ファイル(*.cer)をエクスポートする。

keytool -alias hoge -export -keystore keystore -storepass password -file hoge.cer

クライアントへ証明書を登録

コントロールパネル
 セキュリティ
  証明書の管理
で、「証明書タイプ:証明者のCA」を選択し、エクスポートした自己証明書ファイル(*.cer)をインポートする。
ここで、「インポート」をクリックしても拡張子が「Certificate Files(.csr, .p12)」となっているので、「全てのファイル」に切り替えて自己証明書ファイル(*.cer)を選択する。
この”拡張子が「Certificate Files(.csr, .p12)」となっている”ってのにダマされて、CA(認証局)に提出するCSR(証明書要求)を作ったり(-certreq)してハマってた。
もし、自己(オレオレ)認証局から作ってたら、CSR(証明書要求)をインポートすればよさげ?

以前から初回起動時のみ表示されていた警告ダイアログ

別の問題?

JARファイルのマニフェストに権限属性が…って、それはひとまず別の機会に。

videoタグでPCカメラの映像を表示して静止画を取得する

一応canvasタグに描画する所まで。
以前作ったカメラの静止画を撮るAppletWindows7?Java7?のセキュリティ関係の制約で動作しなくなった。
Appletを無理やり動かすことより、ブラウザの標準的な仕様で構成するように方針転換した方が得策だろ?という判断も。
JMFもいつまで使えるか判らんし。
HTML5Experts.jp>がねこまさし> HTML5でWebRTCを使ってみよう!「カメラを使ってみよう」編 を参考にさせて頂き、drawImageメソッドでvideo→canvasに静止画を撮ってみた。

<!doctype html>
<html>
<head>
  <title>getSnapshot</title>
</head>
<body>
  <video id="myVideo" autoplay="1" ></video>

  <script type="text/javascript">
    navigator.getUserMedia = navigator.getUserMedia || navigator.webkitGetUserMedia || window.navigator.mozGetUserMedia;
    window.URL = window.URL || window.webkitURL;
 
    var video = document.getElementById('myVideo');
    var localStream = null;
    navigator.getUserMedia({video: true, audio: false},
     function(stream) { // for success case
      console.log(stream);
      video.src = window.URL.createObjectURL(stream);
     },
     function(err) { // for error case
      console.log(err);
     }
    );
  </script>

  <br/>
  <button type="button" onclick="getSnapshot();">getSnapshot</button>
  <br/>
  <canvas id="myCanvas" />
  <script type="text/javascript">
    var canvas  = document.getElementById('myCanvas');
    var context = canvas.getContext('2d');
    function getSnapshot() {
     canvas.width = video.videoWidth;
     canvas.height = video.videoHeight;
     context.drawImage(video, 0, 0)
    }
  </script>

</body>

表示結果