当前位置: 首页 > 面试题库 >

使用Bouncy Castle提供程序创建SSLContext实例

督德泽
2023-03-14
问题内容

我被困在创建SSLContext(我想用来实例化SSLEngine来通过java-nio处理加密传输)的过程中:

代码

String protocol = "TLSv1.2";
Provider provider = new BouncyCastleProvider();
Security.addProvider(provider);
sslContext = SSLContext.getInstance(protocol,provider.getName());

引发以下异常:

Exception in thread "main" java.lang.RuntimeException: java.security.NoSuchAlgorithmException: no such algorithm: SSL for provider BC
at org.bitmash.network.tcp.ssl.SslTransferFactory.<init>(SslTransferFactory.java:43)
at org.bitmash.network.http.HttpsServer.<init>(HttpsServer.java:19)

我将Bouncy Castle的当前提供程序包“ bcprov-
jdk15on-150.jar”(从此处获得)附加到了应用程序类路径以及它的引导类路径(通过VM-
Option -Xbootclasspath / p),但是都没有解决问题。我也尝试了不同的值protocol(即“ SSL”和“
TLSv1”),但没有任何效果。

另外,我在这里和这里都发现有类似问题的人。但是与它们相反,我的目标是(并且正在使用)Java
7(或更高版本),但是我仍然遇到这个问题。通常,以这种方式使用Bouncy
Castle是可行的,还是我必须使用其各自的API而不是通过SSLEngine重写html" target="_blank">oracle的NIO重写我的协议(这是我现在正在这样做的方式)?

非常感谢您的帮助。


问题答案:

我知道这是一个古老的问题,但是我需要一个答案(因此我正在创建一个问题):

  • [是否可以]使用Bouncy Castle提供程序创建SSLContext实例[?]
  • 没有

为什么不?

调试以下代码行:

Provider [] providers = Security.getProviders();
  • 默认的SunJSSE版本1.7实现以下SSLContext值:

Alg.Alias.SSLContext.SSL = TLSv1
Alg.Alias.SSLContext.SSLv3 = TLSv1
SSLContext.Default = sun.security.ssl.SSLContextImpl $ DefaultSSLContext
SSLContext.TLSv1 = sun.security.ssl.SSLContextImpl $ TLS10Context
SSLContext.TLSv1.1 = sun.security.ssl.SSLContextImpl $ TLS11Context
SSLContext.TLSv1.2 = sun.security.ssl.SSLContextImpl $ TLS12Context

  • 使用bcprov-jdk15on-152.jar并将新的BouncyCastleProvider()添加到安全性,可以观察到没有可用的SSLContext值。

这应该是有道理的,因为Bouncy
Castle是JCE实现,而不是JSSE实现。



 类似资料:
  • 在Java8上运行的一小部分示例代码中,我试图遵循bc-fips-1.0.2.jar用户指南Legion of the Bouncy Castle Inc. BC-FJA 1.0.2(Bouncy Castle FIPSJavaAPI)用户指南Date: 09/14/19: 注意:对FIPS模式的支持在Java 1.9中似乎已经开始消失,已经确认从Java 11开始它是一个空操作。对于Java 1

  • 我没有做任何更改,我只是运行“CreateReact应用程序客户端”,然后一切正常运行,我将cd放入目录并运行“ThreadStart”。然后我有两个问题:1)它说“有些东西已经在3000端口上运行了”。不幸的是,当我使用lsof和netstat时,端口3000上没有运行任何东西。我说在不同的端口上运行,然后它会尝试为应用程序提供服务。2) 新港口没有提供任何服务。浏览器将打开,控制台不会给出任何

  • 案例:我正在维护一个Java小程序,它使用BouncyCastle库bcpkix-jdk15on-149。jar和bcprov-jdk15on-149。罐子 问题是小程序在启用JRE版本7\u u40的浏览器上运行时 该行为与版本7\u u25不同,它总是会提示一个模式窗口,如“使用自签名证书的应用程序的安全提示”(无法永久隐藏),只是为了信任bcprov。 https://www.java.co

  • 你好Stackoverflow社区, 在尝试编译使用bouncycastle安全提供程序的maven项目时,我得到了以下错误:我知道必须对jar进行签名,因此我将此添加到pom.xml中以防止编译错误: 基于此(bouncycastle provider找不到算法所需的类),我添加了以下内容:,并且在公共静态void main中添加了具有以下内容的提供程序:。 不幸的是,这没有奏效。对于如何实现上

  • 问题内容: 我正在尝试使用bouncycastle使用公共密钥来加密文件。我已经通过编程方式注册了提供程序: 我成功创建了公共密钥对象。 当我使用PGPEncryptedDataGenerator和密钥加密文件时,出现ClassNotFound异常。 似乎提供程序在运行时找不到此类,尽管我确定我有它的jar … 我在Tomcat上运行我的应用程序。使用Maven处理依赖关系- 我放入的充气城堡ja

  • 我有一个使用bouncycastle库的Java applet。当我在Eclipse上运行应用程序时,一切正常,但当我在带有标记的浏览器上使用applet时,当我添加安全BouncyCastleProvider时,它会引发异常。 我的stackTrace是: 我正在使用bcpkix-jdk15on-1.48.jar和bcprov-jdk15on-1.48.jar版本的BouncyCastle。为什