在 REST API 上对 SSL 进行单元测试

Unit Testing SSL at REST APIs

我有一个通过 SSL 运行的 restlet 应用程序。我已经为它创建了一个密钥库并从中提取了证书。

我想测试我的 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();

但是,它可以使用 null 作为密码并使用 changeitpassword(我的密钥库的密码)。

这段代码在某些其他计算机上不起作用(不是通用解决方案)。如果您将 java 主页放入需要许可的文件路径中,则会抛出错误。

那么,有什么方法可以创建另一个信任库并使用它来测试我的 SSL 吗?

根据代码,它应该可以在您的系统或任何其他系统中正常工作。根据我的 ssl 知识,您提取的证书与您的系统有依赖关系。 所以你必须提取或准备新的证书,不仅你的机器应该信任它应该被所有机器信任。

它在没有密码的情况下工作,因为您在 keystore.store() 方法调用中使用 null 作为密码,请改用 .

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

你的,

我通过这种方式找到了解决方案:我在测试期间将我的密钥库声明为信任密钥库。因此,它已成为其他计算机的通用解决方案。我还为我的测试信任密钥库设置了一个密码,该密码将在我的测试期间使用。