java - BouncyCaSTLe安装问题

标签 java bouncycastle

我正在尝试将 BouncyCaSTLe 添加为 Windows XP Pro 上的安全提供程序,以便我可以根据说明使用它向 Android 应用程序添加一些证书 here .不幸的是,我无法添加提供商。

我已经:

  1. 将提供程序下载到 C:\Program Files\Java\jre6\lib\ext\
  2. C:\Program Files\Java\jre6\lib\ext\bcprov-jdk16-146.jar 添加到 %CLASSPATH%
  3. security.provider.7=org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider 添加到 java.security(7 是顺序中的下一个整数)。

当我运行时:

keytool -import -v -trustcacerts -alias 0 -file mycert.crt -keystore mystore.bks -storetype BKS -providerName org.bouncycastle.jce.provider.BouncyCastleProvider -storepass mypassword 

我收到以下错误消息:

keytool error: java.lang.ClassNotFoundException: org.bouncycastle.jce.provider.BouncyCastleProvider

我也试过动态添加它:

import java.security.Provider;
import java.security.Security;
import java.util.Enumeration;

import org.bouncycastle.jce.provider.BouncyCastleProvider;

public class BouncyCastleMain {

    public static void main(String[] args) throws Exception {
        Security.addProvider(new BouncyCastleProvider()); // add it
        try { // list them out
            Provider p[] = Security.getProviders();
            for (int i = 0; i < p.length; i++) {
                System.out.println(p[i]);
                for (Enumeration<?> e = p[i].keys(); e.hasMoreElements();)
                    System.out.println("\t" + e.nextElement());
            }
        } catch (Exception e) {
            System.out.println(e);
        }
    }
}

起初我在编译 java 类时遇到访问错误,但根据建议将其更改为警告 here .现在,当我运行代码时,它会在提供程序列表中显示 BouncyCaSTLe,但程序完成后它不会停留。

我确信它一定是可行的,但我对如何让这个人安装足够长的时间以使用它运行 keytool 感到困惑。是否可以通过 Java API 运行 keytool,或者是否有一些我错过的步骤会让提供者坚持下去?

谢谢!

最佳答案

-providerName 选项需要一个提供者名称(本例中为“BC”),而不是类名。另一个选项 -providerClass 确实需要类名,当提供程序未在 java.security 文件中注册时它很有用。

当您“以编程方式”注册提供者时,这只是临时的。您的程序必须在每次运行时重新注册其提供者。如果您的目标是使 BouncyCaSTLe 可用于 keytool,则您将无法使用此方法。

因为您已经安装了提供程序(通过将归档文件放入 lib/ext 并将其列在 java.security 中),使用 -providerName BC 选项可能是最简单的解决方案。或者,您可以使用 -providerClass org.bouncycaSTLe.jce.provider.BouncyCaSTLeProvider 选项。

顺便说一句,您不应该使用CLASSPATH 环境变量。 lib/ext 中的库已经在类路径中。

如果在更正选项后,您仍然得到 NoSuchProviderException(使用 -providerName)或 ClassNotFoundException(使用 -providerClass ),确认您使用的是 keytool 的正确副本。也就是说,在执行时,指定keytool 的完整路径,而不是依赖于您的PATH 变量。确保该路径指向安装了 BouncyCaSTLe 的 JRE。一个系统具有多个 JRE 和 JDK 的情况并不少见。

关于java - BouncyCaSTLe安装问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5914108/

相关文章:

JAVA API 创建 keystore 并向其附加 csr 和 key 对

java - 从 groovy 中的嵌套映射返回一维映射

java - Selenium:更改实例或连接两个实例

java - Junit 测试 Akka 单例 Actor : preStart() hook not called

java - 如何使用 BouncyCaSTLe 的 TLS Api 导入 keystore

c# - Bouncy CaSTLe C# 可以与 .NET 密码学一起使用吗

java - session 和请求的对象

java - @JsonProperty(access = JsonProperty.Access.WRITE_ONLY) 不工作

在 Java 中使用 BouncyCaSTLe 的椭圆曲线加密 API 进行加密

c# - 使用 BouncyCaSTLe 生成的证书验证为服务器时出现 "The credentials supplied to the package were not recognized"错误