2016-08-26 15 views
0

私はSSL経由で動作する、Restletアプリケーションを持っています。私はそれのためのキーストアを作成し、そこから証明書を抽出しました。ユニットテストでのSSLのREST API

私は自分のSSL Restletアプリケーションをテストしたいのですが、その証明書をトラストストアにインポートする必要があります。私はそれを試してみました、私のマシンで動作しているようです:

final char sep = File.separatorChar; 
File dir = new File(System.getProperty("java.home") + sep + "lib" + sep + "security"); 
File file = new File(dir, "cacerts"); 
InputStream localCertIn = new FileInputStream(file); 

KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType()); 
keystore.load(localCertIn, null); 

if (keystore.containsAlias("mycertalias")) { 
    localCertIn.close(); 
    return; 
} 

localCertIn.close(); 

InputStream certIn = new FileInputStream("src/test/mycert.cer"); 
BufferedInputStream bis = new BufferedInputStream(certIn); 
CertificateFactory cf = CertificateFactory.getInstance("X.509"); 

while (bis.available() > 0) { 
    Certificate cert = cf.generateCertificate(bis); 
    keystore.setCertificateEntry("mycertalias", cert); 
} 

certIn.close(); 

OutputStream out = new FileOutputStream(file); 
keystore.store(out, null); 
out.close(); 

しかし、それはパスワードとして及びchangeitまたはpassword(私のkeytstoreのパスワード)とヌルで動作します。

このコードは、他のコンピュータでは使用できません(一般的な解決策ではありません)。あなたが許可を必要とするファイルパスにあなたのjavaホームを置くと、それはエラーをスローします。

したがって、別のトラストストアを作成し、それを使ってSSLをテストする方法はありますか?

答えて

0

私はこの方法で解決策を見つけた:私は私のテストの間に信頼キーストアとしての私のキーストアを宣言しました。だから、それは他のコンピュータの汎用ソリューションでした。また、テスト中に使用するテスト信頼キーストアのパスワードを設定しました。

0

コードごとに、システムまたは他のシステムで正常に動作しているはずです。あなたが抽出した証明書があなたのシステムに依存しているという私の知識に基づいて。 したがって、あなたのマシンだけでなく、すべてのマシンが信頼しなければならない新しい証明書を抽出または準備する必要があります。

+0

すべてのマシンで信頼できる証明書を準備するにはどうすればよいですか? – kamaci

0

keystore.store()メソッド呼び出しでnullをパスワードとして使用するため、パスワードなしで動作しています。

keystore.store(out, "password".toCharArray()); 

ユアーズ、

+0

'password'は私の証明書を生成するキーストアのパスワードです。パスワードも機能します。 'null'を使用して問題がありますか? – kamaci

+0

はい、キーストアへのアクセスはパスワードで保護されています。パスワードを必要としない場合は、nullではなく空のchar配列を使用できます。 [この前の応答を参照](http://stackoverflow.com/questions/21531386/keystore-delete-password) – hgregoire