在哪里放置 bouncycastle jar 让它成为 Java JDK 的加密服务提供者?

Posted

技术标签:

【中文标题】在哪里放置 bouncycastle jar 让它成为 Java JDK 的加密服务提供者?【英文标题】:where to put bouncycastle jar to have it be a crypto service provider with Java JDK? 【发布时间】:2021-10-17 19:48:29 【问题描述】:

我在 Windows 10 上安装了 Java SE Development Kit 16.0.2,看起来 Java 二进制文件已安装到 C:\Program Files\Common Files\Oracle\Java\javapath

我想将 BouncyCastle 安装为加密服务提供商,为此我想我需要将 Jar 文件放在 java-home/jre/lib/ext/ 目录中。 C:\Program Files\Common Files\Oracle\Java\javapath 没有 jre 目录,也没有 lib 目录。

那么我应该把 Jar 文件放在哪里呢?

【问题讨论】:

你有更多的上下文吗?似乎加密服务提供者应该是特定于项目的,你可以使用像 gradle 或 maven 这样的工具来指定 dep。 Java 的最新版本(Java 9 及更高版本)不再具有提供的扩展机制。在任何情况下,C:\Program Files\Common Files\Oracle\Java\javapath 都是查找任何 Java 版本的错误位置,因为它只是基本可执行文件的位置,而不是您的实际 Java 安装位置。 马克是对的。您需要确保它在类路径中 【参考方案1】:

简短回答:对于您运行的每个应用程序,您都明确设置了类路径。您只需要确保充气城堡罐在里面。

但是,没有引导类路径吗?

是的;它包含java.lang.String 之类的内容。您不能将 JDK 更改为在 bootclasspath 上拥有比没有hackery 的标准集更多的内容。你不想要这个骇客。

扩展机制呢?

不再存在。

CLASSPATH 环境变量呢?

过去时代的遗迹。所有 java 应用程序都是通过启动器、IDE 或明确指定类路径的构建工具启动的(在这种情况下,CLASSPATH env var 被忽略),或者通过启动一个 jar,它在其清单中定义了自己的类路径,然后再次 @ 987654325@ 被忽略。 Java 仍然支持 CLASSPATH 环境变量。但是,您曾经使用 JVM 运行的任何应用程序都不应该使用它。 Java 支持java.util.Vector,即使在 jdk16 中也是如此。并不意味着你应该使用它。

但我想要一个我没有编写的 java 应用程序来使用 bc。

这通常不容易。我们回到了一些相当具体的黑客。

如何制作使用 bc 的 jar?

查看 jar 清单中的 Class-Path 条目是如何工作的。您可以将 bc jar 放在您的应用程序的 zip 文件中(或使用安装程序),这样当您运行应用程序时,它与您的主应用程序位于同一目录中。您所需要的只是 jar 清单中的 Class-Path: thatbcjar.jar 并且它将被使用(并且该 jar 相对于应用程序 jar 所在的目录进行解析,因此无论您启动您的工作目录是什么,这都有效java jar)。

【讨论】:

当我尝试将 BouncyCastle 添加为 加密服务提供者时,我需要根据 docs.oracle.com/cd/E19830-01/819-4712/ablsc/index.html 修改 jre/lib/security/java.security。我只是不知道该文件的位置。 Jar 还需要与 BouncyCastle 的 Jar 相关,才能用作 加密服务提供者 @neubert 这是依赖于不再存在的扩展机制的古老文档。我实际上并没有尝试过,但最近的文档建议您可以在java.security 文件中注册一个提供程序,然后它需要位于模块路径(或非模块化应用程序的类路径)上,或者由提供者类名:Step 8.1: Configure the Provider @neubert jre/lib/security 直接在JAVA_HOME 文件夹下(如果安全文件夹不存在,请创建它),假设您使用的是 JDK 而不是 JRE @OneCricketeer 在最近的 Java 版本中,它是 lib/security,而不是 jre/lib/security,但是配置文件是 conf/security

以上是关于在哪里放置 bouncycastle jar 让它成为 Java JDK 的加密服务提供者?的主要内容,如果未能解决你的问题,请参考以下文章

如何添加BouncyCastle的算法到Android

求助,package org.bouncycastle.crypto does not exist

Flutter 错误:无法下载 bcprov-jdk15on.jar (org.bouncycastle:bcprov-jdk15on:1.56)

创建类时我应该在哪里放置new / delete

BouncyCastle

java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider解决方法