标签: tls1.3

如何使用 Tls 1.3 处理 HttpWebRequest C#

由于以下错误消息,我无法使用 WebRequest 连接到 HTTPS 服务器 (TLS 1.3):

请求被中止:无法创建 SSL/TLS 安全通道。

以前的 TLS 版本是 1.2,使用下面的代码我可以正确获取页面,但随着页面 ssl 升级到 TLS 1.3,我收到错误,而且我找不到任何解决方案:

ServicePointManager.Expect100Continue = true;
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
Run Code Online (Sandbox Code Playgroud)

其实我觉得应该是这样的:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls13;
Run Code Online (Sandbox Code Playgroud)

但没有。

ssl httpwebrequest tls1.3

14
推荐指数
1
解决办法
3万
查看次数

Java 11 和 12 SSL 套接字在启用 TLSv1.3 的情况下因 handshake_failure 错误而失败

在 Java 12 中开发基于 SSL(非 HTTP)的服务器时,我遇到了让服务器和客户端一起通信的意外困难。连接总是因 handshake_failure 错误而中断。经过大量努力(最初我是在证明我的证书),由于套接字级别的 HelloWorld SSL 客户端/服务器对,我能够隔离问题:握手失败是由启用的协议中存在 TLSv1.3 引起的默认情况下在 JDK 中。

到目前为止,我避免握手错误的解决方案是完全禁用 TLSv1.3(服务器端),但我对这个解决方案并不满意。我想了解发生了什么(假设它不是 JDK 或系统中的错误,而是我的应用程序或我的环境中的错误)。

我在下面提供了一些代码。谁能检查并告诉我我做错了什么?谢谢和最好的问候。

这是我的配置:OSX 10.14 (Mojave) 我已经使用以下 Java 版本进行了测试:

编辑:我在我的测试中添加了 Java 11,这个版本也出现了问题

  • Java 8 (oracle64-1.8.0.181):没有握手失败
  • Java 10 (oracle64-10.0.2 2018-07-17):没有握手失败
  • Java 11(openjdk 版本“11.0.4”2019-07-16):握手失败
  • Java 12 (oracle64-12.0.1 2019-04-16):握手失败
  • Java 12 (openjdk 12.0.2 2019-07-16):握手失败
// HelloSSLServer.java

import java.net.*;
import javax.net.*;
import javax.net.ssl.*;
import java.io.*;

public class HelloSSLServer {

    public static void main(String args[]) throws Exception {
        int port = 1234;
        boolean needClientAuth = false;
        ServerSocketFactory factory …
Run Code Online (Sandbox Code Playgroud)

java ssl sslhandshakeexception tls1.3

12
推荐指数
1
解决办法
2万
查看次数

如何在没有记录层的情况下获得TLS握手?

我正在查看最近的QUIC传输协议(传输TLS)的Internet草案,并想知道如何在Java(或其他JVM语言)中实现,假设我不想同时重新实现TLS 1.3.

TLS通常基于TCP(或其他具有类似服务的协议),TLS本身有两层:

   +--------------+--------------+--------------+
   |  Handshake   |    Alerts    |  Application |
   |    Layer     |              |     Data     |
   |              |              |              |
   +--------------+--------------+--------------+
   |                                            |
   |               Record Layer                 |
   |                                            |
   +--------------------------------------------+
   |                                            |
   |                   TCP                      |
   |                                            |
   +--------------------------------------------+
Run Code Online (Sandbox Code Playgroud)

2.1改编自互联网草案

在Java中,我们可以使用javax.net.ssl中的类来实现这一点,或者使用SSLEngine仅用于没有I/O的TLS(应用程序或框架需要插入网络,例如使用NIO),或者使用SSLSocket(通过常用的InputStream/OutputStream阻塞I/O实现TCP上的TLS或SSLServerSocket.

QUIC仅使用TLS 1.3的握手部分来协商会话密钥,同时使用自己的数据包格式和加密("数据包保护")而不是TLS'记录层(整个过程基于UDP,而不是TCP):

   +--------------+--------------+ +-------------+
   |     TLS      |     TLS      | |    QUIC     |
   |  Handshake   |    Alerts    | | Applications|
   |              |              | | (h2q, etc.) | …
Run Code Online (Sandbox Code Playgroud)

java ssl tls1.3

11
推荐指数
1
解决办法
253
查看次数

在 Wireshark 中过滤 TLS 1.3 流量

有没有一种简单的方法可以在 Wireshark 中过滤 TLS 1.3 数据包?

tls.record.version不起作用,因为它通常包含值0x0303(TLS 1.2)。

我假设 Wireshark 通过查看 ServerHello 消息中的 SupportedVersions 扩展来识别 TLS 1.3,如果版本是0x0304(TLS 1.3),它可能会将该协议应用于整个 TLS 流。

TLSv1.3显示在“协议”列中,但我不确定应用哪个显示过滤器来过滤这些数据包。

在此输入图像描述

wireshark tls1.3

9
推荐指数
1
解决办法
2万
查看次数

TLS 1.3 的 SSL 握手失败

curl 在 openssl 版本 1.1.1d 上失败,但在 OpenSSL/1.0.1t 上工作正常。我正在尝试调试原因,但无法找到原因。

请从卷曲日志中找到以下跟踪。

失败案例(curl 7.64.0 (x86_64-pc-linux-gnu) libcurl/7.64.0 OpenSSL/1.1.1d)

  CApath: /etc/ssl/certs
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
* TLSv1.3 (IN), TLS handshake, Server hello (2):
* TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8):
* TLSv1.3 (IN), TLS alert, handshake failure (552):
* error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
* Closing connection 0
curl: (35) error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure
Run Code Online (Sandbox Code Playgroud)

成功案例。卸载curl并安装curl版本curl 7.38.0 (x86_64-pc-linux-gnu) libcurl/7.38.0 OpenSSL/1.0.1t

* Connected to kafkaconnect-0.kc.default.svc.cluster.local (10.244.4.107) port 443 (#0) …
Run Code Online (Sandbox Code Playgroud)

openssl libcurl sslv3 tls1.3

8
推荐指数
1
解决办法
1万
查看次数

带有 openssl 1.1.1 的 Apache 2.4.37:无法执行握手后身份验证

我将 apache 更新到最新版本 2.4.37 并将 openssl 更新到 1.1.1 现在,当客户端进行身份验证时,我只会在 Firefox 63 中收到此错误,但在 Chrome 中不会:

[ssl:error] AH: verify client post handshake, referer: https://******/login
[ssl:error] AH10158: cannot perform post-handshake authentication, referer: https://******/login
[ssl:error]SSL Library Error: error:14268117:SSL routines:SSL_verify_client_post_handshake:extension not received
Run Code Online (Sandbox Code Playgroud)

我使用wireshark尝试查找问题,我很欣赏Firefox使用TLS 1.3,而Chrome使用TLS 1.2。事实上,如果我将 FF 中的 TLS 最大版本设置为 TLS 1.2,它就可以正常工作。

我想获得 TLS 1.3 兼容性,或者,如果还不可能,强制在我的 Apache 配置中,客户端总是使用 TLS 1.2,但我不明白:(

这是我的 apache vhost 配置文件:

[...]

SSLEngine on
SSLCertificateFile      /etc/apache2/ssl/server.crt
SSLCertificateKeyFile   /etc/apache2/ssl/server.key
SSLCertificateChainFile /etc/apache2/ssl/intermediate.crt
SSLCACertificateFile /etc/apache2/ssl/ca.pem
SSLVerifyDepth 3
SSLProtocol TLSv1.2
SSLHonorCipherOrder on

<Directory /var/www/html/>
    Options -Indexes +FollowSymLinks …
Run Code Online (Sandbox Code Playgroud)

apache authentication ssl openssl tls1.3

7
推荐指数
2
解决办法
1万
查看次数

卷曲:RSA_padding_check_PKCS1_type_1:填充无效

我正在通过代码(使用 OpenSSL API)为我的服务器应用程序生成 X509 证书。我刚刚通过在我的代码的支持列表中添加 TLSv1.3 密码来添加对 TLSv1.3 的支持。

证书生成和将 RSA pub + 私钥分配给证书没有任何变化。

我已在客户端升级 curl 和 OpenSSL 库以启用 TLSv1.3 连接。升级的 Curl 版本:7.63.0 & OpenSSL 版本:1.1.1

我看到以下错误:

* TCP_NODELAY set
* Connected to <domain> (<ip-address>) port 443 (#0)
* ALPN, offering h2
* ALPN, offering http/1.1
* successfully set certificate verify locations:
*   CAfile: myCA.pem
  CApath: none
} [5 bytes data]
* TLSv1.3 (OUT), TLS handshake, Client hello (1):
} [512 bytes data]
* TLSv1.3 (IN), TLS handshake, Server hello …
Run Code Online (Sandbox Code Playgroud)

c ssl curl openssl tls1.3

6
推荐指数
1
解决办法
1万
查看次数

6
推荐指数
1
解决办法
2万
查看次数

Deno / Postgres“无效的对等证书内容:无效的对等证书”错误

我正在使用denodb 连接到 supabase postgres 服务器。

这是 deno 部署时出现的错误。

TLS 连接失败,并显示消息:无效的对等证书内容:无效的对等证书:UnsupportedCertVersion 默认为非加密连接

在此输入图像描述

在这里建立连接:

import { Database, PostgresConnector } from "https://deno.land/x/denodb/mod.ts";
import "https://deno.land/x/dotenv/load.ts";

export const connection = (() => {
  const DENODB_PGURL = Deno.env.get('DENODB_PGURL');

  if (DENODB_PGURL) {
    return new PostgresConnector({uri: DENODB_PGURL});  
  }

  const DENODB_HOST = Deno.env.get('DENODB_HOST');
  if (!DENODB_HOST) throw new Error('DENODB_HOST is not set');
  const DENODB_USERNAME = Deno.env.get('DENODB_USERNAME');
  if (!DENODB_USERNAME) throw new Error('DENODB_USERNAME is not set');
  const DENODB_PASSWORD = Deno.env.get('DENODB_HOST');
  if (!DENODB_PASSWORD) throw new Error('DENODB_PASSWORD is not set');
  const DENODB_DATABASE …
Run Code Online (Sandbox Code Playgroud)

postgresql deno tls1.3 supabase deno-deploy

6
推荐指数
1
解决办法
1598
查看次数

Google 建议 Security ProviderInstaller 将 TLS 降级至 1.2?

使用 OkHttp 和Google Security ProviderInstaller与支持 TLS1.2 和 TLS1.3 的域的任何连接都是使用 1.2 版本进行的。如果没有 ProviderInstaller,使用 1.3 一切都可以正常工作。

这是示例代码,在 Android 12 上使用最新版本的 okhttp 和 play-services-basement

GlobalScope.launch(Dispatchers.IO) {
    var r1 = OkHttpClient().newCall(Request.Builder().url("https://www.google.com").build()).execute()
    println(r1.handshake)
    try {
        ProviderInstaller.installIfNeeded(this@MainActivity)
        println("ProviderInstaller DONE")
    } catch (e: Exception) {
        e.printStackTrace()
    }

    var r2 = OkHttpClient().newCall(Request.Builder().url("https://www.google.com").build()).execute()
    println(r2.handshake)
}
Run Code Online (Sandbox Code Playgroud)

日志结果是

I/System.out: Handshake{tlsVersion=TLS_1_3 cipherSuite=TLS_AES_128_GCM_SHA256 peerCertificates=[CN=www.google.com, CN=GTS CA 1C3, O=Google Trust Services LLC, C=US, CN=GTS Root R1, O=Google Trust Services LLC, C=US] localCertificates=[]}
I/System.out: ProviderInstaller DONE
I/System.out: Handshake{tlsVersion=TLS_1_2 cipherSuite=TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 peerCertificates=[CN=www.google.com, CN=GTS CA 1C3, …
Run Code Online (Sandbox Code Playgroud)

android google-play-services tls1.3

6
推荐指数
0
解决办法
418
查看次数