gpt4 book ai didi

java - 使用 Bouncy CaSTLe 提供程序创建 SSLContext 实例

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:25 24 4
gpt4 key购买 nike

我一直在创建 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”(我从 here 获得)附加到应用程序类路径及其引导类路径(通过 VM-Option -Xbootclasspath/p),但是都没有解决问题。我还为 protocol 尝试了不同的值(即“SSL”和“TLSv1”),但没有任何效果。

另外,我发现有类似问题的人herehere .但与他们相反,我的目标是(并且正在使用)Java 7(或更高版本),但我仍然遇到这个问题。一般而言,以这种方式使用 Bouncy CaSTLe 是否可行,或者我是否必须使用它们各自的 API 而不是 oracle 的 NIO via SSLEngine 来重写我的协议(protocol)? (我现在就是这样做的)?

非常感谢您在这里提供的任何帮助。

最佳答案

我知道这是一个老问题,但我需要一个答案(所以我创建了一个):

  • [是否可以]使用 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() 添加到 Security,可以观察到没有可用的 SSLContext 值。

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

关于java - 使用 Bouncy CaSTLe 提供程序创建 SSLContext 实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23906736/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com