使用scribe OAuth库时出现以下异常.
Caused by: javax.net.ssl.SSLException: java.lang.RuntimeException: Unexpected error: java.security.InvalidAlgorithmParameterException: the trustAnchors parameter must be non-empty
Run Code Online (Sandbox Code Playgroud)
基于一些谷歌搜索似乎我应该以某种方式设置JVM信任库.
为什么我需要这样做?如何指示Java VM使用os的默认信任库?(在我的情况下是Mac OS X).
我正在编写一个 Java 应用程序,该应用程序使用远程 Https 站点进行 Rest Api 调用。远程站点由受信任的证书签名。它在 Windows 上运行良好,但是,由于 SSL 证书问题,它在 OS X 上运行有问题。
我做了一些挖掘,发现原因与我如何使用 getInstance 调用在代码中初始化 KeyStore 对象有关。它只从“系统”钥匙串中读取证书,而不是从“系统根”钥匙串中读取证书。下面是从密钥库中打印出所有证书的代码片段。
// In windows use "WINDOWS-ROOT"
KeyStore osTrustManager = KeyStore.getInstance("KeychainStore");
osTrustManager.load(null, null);
Enumeration<String> enumerator = osTrustManager.aliases();
while (enumerator.hasMoreElements()) {
String alias = enumerator.nextElement();
if (osTrustManager.isCertificateEntry(alias)) {
m_logger.info(String.format("%s (certificate)\n", alias));
}
}
Run Code Online (Sandbox Code Playgroud)
如何更改代码以实现这一目标?感谢有人可以插话。
我发现了这个问题:Import Windows Certification to Java,它有 Windows 机器的答案。我一直无法找到-Djavax.net.ssl.trustStoreType=WINDOWS-ROOTMacOS 的等效项。