在哪里放置 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 的加密服务提供者?的主要内容,如果未能解决你的问题,请参考以下文章
求助,package org.bouncycastle.crypto does not exist
Flutter 错误:无法下载 bcprov-jdk15on.jar (org.bouncycastle:bcprov-jdk15on:1.56)
java.lang.NoClassDefFoundError: org/bouncycastle/jce/provider/BouncyCastleProvider解决方法