Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

Appletでサーバー証明書を確認する方法

もしご存知の方がいればお知恵を拝借したく、質問します。

Appletが接続するサーバーを限定したいと考え、HTTPSでサーバーに接続してApplet内部でサーバー証明書の確認をしたいと考えています。

そのために、AppletのJARファイル内に証明書ファイルを格納してそれをAppletで読み出したいのですが、それがどうしてもできません。

上記を実現する方法、もしくはもっとよい方法があれば教えてください。

よろしくお願いします。

4

回答

79991

閲覧

4件の回答

評価

0

署名付Appletなんて
そんなにマイナーな単語じゃないと思うわよ

> できない
どうできないの?
最初からやり方がわからないなら
まずはGoogle先生にでも聞いてきて。

評価

0

署名付Appletって、JARをjarsignerで署名することじゃないんですか?


>> できない
>どうできないの?

HttpURLConnection.getServerCertificate()でサーバー証明書が取れそうなので、それをApplet JARファイル内の証明書ファイルとverifyしようとしています。

が、new FileInputStream(filename)でとれず、
AppletやAppletContextのAPIを眺めてみたんですが、該当するメソッドは見つからずでJAR内のファイルを読み出す方法が見つかりません。

評価

0

アプレットからJARファイル内のファイルを読み出したいのなら、アプレットクラスを利用して
Class#getResource
又は
Class#getResourceAsStream
を使用するのをお勧めします。

これはアプレットに限らず、クラスパス内から任意のファイルを読み出すときに使用する方法です。
目的のJARファイル内に格納されているクラスを利用します。

アプレットの場合、クラスパスに必ずCodeBaseが含まれてしまうので、JARファイル内に存在しないファイルを読もうとすると、サーバにファイルをダウンロードに行きます。注意してください。

評価

0

できましたー。
一部ですが、こんな感じです。

    private void jButton2ActionPerformed(java.awt.event.ActionEvent evt) {                                         
        ・・・
        URLConnection ucon = url.openConnection();
        ucon.setRequestProperty("Content-type", "application/octet-stream");
        ucon.connect();
        HttpsURLConnection ucons = (HttpsURLConnection)ucon;
        PublicKey key = getPublicKey();
        for(Certificate c : ucons.getServerCertificates()){
            c.verify(key);
        }
        ・・・
    }

    private PublicKey getPublicKey() throws CertificateException,FileNotFoundException{
        CertificateFactory cf = CertificateFactory.getInstance("X.509");
        Certificate c = cf.generateCertificate(this.getClass().getResourceAsStream("test.cert2"));

        return c.getPublicKey();
    }

お教えいただきありがとうございました。
とても助かりました。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。