问题标签 [sslcontext]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
860 浏览

java - Akka-HTTP 服务器 HTTPS 支持

我发现自己很难为我们的 akka-http java 应用程序启用 https 支持。文档页面(https://doc.akka.io/docs/akka-http/current/server-side/server-https-support.html)应该有所帮助,但出于某种原因,在我的情况下它没有。

根据我从该页面获得的信息 - 想法是在实际执行某些路由绑定之前获取一个HttpsConnectionContext实例并将其用作方法调用的参数。http.setDefaultClientHttpsContext(...)

到目前为止我所拥有的:

SSLContext从配置创建的代码:

实际平安配置:

使用它们来启用 https:

但这实际上无济于事。如果我尝试对服务器进行一些 https 调用,则会收到以下异常:

Illegal request, responding with status '400 Bad Request': Unsupported HTTP method: The HTTP method started with 0x16 rather than any known HTTP method. Perhaps this was an HTTPS request sent to an HTTP endpoint?

我可能错过了一些东西,但我不知道是什么

0 投票
0 回答
2392 浏览

python - 使用 TLS 的烧瓶应用程序

我正在尝试通过 TLS 执行我的 Flask 应用程序,这是我的示例:

这就是我生成证书的方式:

而对于客户端证书:

但是当我尝试执行我的 curl 请求时:

问题是什么?
如果我删除部分以识别客户端,它可以工作:

此外,对于带有密码的证书,如何在加载证书时指定 PEM 密码?

0 投票
1 回答
523 浏览

java - Java 8 不能强制 TLS 来创建 sslcontext?

我想将 TLS/TLSv1.2 用于 ssl 上下文:

我们正在使用自定义信任库和密钥管理器,在这里忽略它们,但我们确实需要它们。

现在每次都会打印“SSLv2Hello”。

我都试过了

两者都没有奏效。

作为参考,这在 JDK 1.8.0_171 上运行

谢谢您的帮助

0 投票
0 回答
1542 浏览

java - Java - 签名算法的算法约束检查失败:RSASSA-PSS 尝试使用 SSLContext 打开 LDAP 连接

当我尝试使用 SSLContext 打开 LDAP 连接时,我收到如下证书验证错误。

我验证了最新的 Zulu JDK 8u252 支持 RSASSA-PSS 算法,打印提供者和签名算法如下

此外,通过运行 KeyFactory.getInstance("RSASSA-PSS"),以下是签名算法的详细信息

服务器证书的内容如下。注意签名算法是 RSASSA-PSS

我已经禁用了 java.security 和 Java 中的大多数签名算法,如下所示

在日志中,我使用 Security.getProperty("jdk.certpath.disabledAlgorithms") 禁用了上述算法

我正在初始化 SSLContext 如下

由于我是加密新手并试图使用在线资源使其工作,我仍然缺少一些东西。任何人都可以帮助我哪里出错了吗?


更新:

在实例化自定义信任管理器时使用 X509ExtendedTrustManager 而不是 X509TrustManager 使其工作的一种方法。但是使用 X509ExtendedTrustManager 而不是 X509TrustManager 的潜在漏洞是什么?如此链接/评论中所述,在生产中使用它是不安全的。

0 投票
1 回答
142 浏览

certificate - 如何从 Websphere 中的 java 应用程序访问签署者证书,以便将 TrustMaterial 加载到 SSLContext 中?

我想创建一个包含来自 WebSphere NodeDefaultTrustStore 的签名者证书的 TrustStore 的 HttpClient。

为此,必须:

  • 获取证书并创建一个 TrustStore 以使用 TLSv1.2 协议加载到自定义 SSLContext
  • 从 WebSphere 获取一个 SSLContext,它已经包含了这样的 TrustStore 和协议。

我还没有找到一种方法来实现。

我知道 WebSphere 存储的证书的磁盘地址,但它存储为 .p12 文件,如果我在 java 中创建 SSLContext,我需要一个 .jks 文件。

我可以将 .cer 文件导入到 .jks 文件中,然后从 java 代码中的磁盘加载它,但我们已经在 WebSphere 中加载了证书,并且更愿意使用该证书。

0 投票
0 回答
571 浏览

java - 如何在 JAVA 中的 SSL 握手期间将签名算法从一个提供者添加到另一个提供者

因为我正在尝试添加对 SSL 握手的 RSASSA-PSS 算法的支持。此算法由 SunRsaSign 提供程序提供,而 SunJSSE 提供程序中缺少相同的算法,该提供程序在 Java 8u252 中的 SSL 握手期间用作默认提供程序。我正在初始化 SSL 上下文,如下所示 SSLContext ssl = SSLContext.getInstance("TLSv1.2");

我想知道如何将此算法添加到 SSLContext/SSLSocket,以便证书验证成功。

下面最新的 Java-8 是 SSL 握手期间可用的算法。正如我们所见,支持的算法列表中缺少 RSASSA-PSS 算法。因此,握手失败

在此处输入图像描述

然而,SSL 握手发生在 Java-11 中,因为我们在运行时有 RSASSA-PSS 算法。请注意,在 Java-11 中,RSASSA-PSS 算法由 2 个提供商 SunJSSE 和 SunRsaSign 提供。 在此处输入图像描述

0 投票
1 回答
241 浏览

android - 为什么 okhttp 在 Socket Factory 中激活时不使用 TLSv1?

在一些旧的 Android 版本 (< API 21) 上,只有SSLv3并且TLSv1可用:

在此处输入图像描述

服务器接受最小值TLSv1,握手SSL被拒绝。因此,为了让 Glide 正确加载图像,我使用了一个自定义 okhttp 客户端和一个使用TLSv1.

当我在这些方法中设置断点时,我看到它们在 Glide 初始化时被调用,但图像仍然没有加载,错误仍然是:

如果我删除上面的所有代码并在应用程序启动时调用它,图像加载正常:

但是根据SSLContext,该设备已经TLSv1在设备上可用,所以我更喜欢没有 Google Play Services 依赖项。

这是为什么?

0 投票
0 回答
678 浏览

java - 具有默认 SSLContext 的 Java SSL 异常

深入研究代码,这是我用来创建 SSLContext 的方法

然后使用生成的 SSLContext 来创建我用来加密网络通信的 SSLEngine 实例。既然这已经解决了,我已经尝试了 3 种不同的方法来创建 SSLContext,但只有一种有效。我想了解其他 2 个失败的原因,以及如何使它们工作(如果可能)。在 SSL 握手期间,两个失败的都失败了。

方法#1(有效)

我的 SSL 握手在使用我自己的信任库和密钥库时起作用,如下所示:

方法#2(不起作用)

在这种情况下,我得到以下异常:

方法#3(不起作用)

但是这次我遇到了以下异常:

附带说明一下,我对使用 Grizzly 等第三方库不感兴趣。谢谢!

0 投票
1 回答
759 浏览

ssl - 进行身份验证时如何在码头服务器中获取客户端的证书

通过设置 SslContextFactory.setNeedClientAuth(true) 设置请求客户端身份验证的嵌入式 Jetty 服务器后,当客户端连接到码头服务器两种情况下,身份验证成功和失败时,如何获取客户端的证书信息?

我已阅读此参考资料,但我认为这仅适用于身份验证成功。SecureRequestCustomizer.customize(...)似乎只有在客户端的证书信息成功验证后才执行。

但是我想知道当码头服务器进行身份验证时,无论成功还是失败,有什么方法可以获取客户端的证书信息。然后我可以得到客户端的证书信息,即使这个客户端不受码头服务器的信任。

0 投票
0 回答
32 浏览

scala - 在 Scala 中使用两个不同的自定义 KeyStore

我正在使用具有 2 个接口的 Scala 语言开发应用程序。第一个应用程序表现为服务器,第二个应用程序表现为客户端。我希望双方都有 HTTPS 安全连接(相互身份验证)。现在,我尝试拆分密钥库,使一个实例包含第一个接口的证书,另一个实例包含第二个接口的证书。因此,我实例化了 KeyStore 的 2 个变量,传递了不同的证书,然后初始化了 2 个不同的 KeyManagerFactory。最后,我初始化了 2 个不同的 SSLContext 以便在 HTTPS 连接中使用它们。启用 ssl: handshake debug 我可以看到:

似乎我的应用程序无法满足服务器的 CertificateRequest(此调试与客户端有关),而服务器端的连接顺利。所以,我的问题是:我可以使用两个不同的密钥库(和 KeyManagerFactory)还是 java 不支持?我该怎么做这个操作?

更新

我刚刚读到我只能将一个 KeyStore(我以前的解决方案是一个带有两个证书的 KeyStore)与 X509ExtendedKeyManager 一起使用,并使用方法 chooseClientAlias() 来选择使用什么证书。任何人都知道我该怎么做这个改进?