使用SSL访问RDS - 不支持的记录版本Unknown-0.0

R.G*_*aji 5 ssl rds

我正在使用亚马逊RDS MySQL并连接SSL证书(http://s3.amazonaws.com/rds-downloads/mysql-ssl-ca-cert.pem上提供的默认证书),我正在执行以下步骤:

  1. 下载了 mysql-ssl-ca-cert.pem
  2. 修改上面的文件JKS格式化
  3. 从Web应用程序通过Spring - Hibernatetemplate(org.springframework.beans.factory.config.PropertyPlaceholderConfigurer)连接并使用c3p0,我们将其他URL参数设置为jdbc:URL/DB?autoReconnect=true&useUniCode=true&characterEncoding=UTF-8&useSSL=true&verifyServerCertificate=false&requireSSL=true

但我面临以下问题......

javax.net.ssl.SSLException: Unsupported record version Unknown-0.0
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

小智 4

基本上这意味着 SSL 解析器丢失。套接字层向其传递了一些不符合 SSL 协议的字节。

当您使用 SSL 套接字进行传输时,它会调用格式化和加密例程来创建加密数据包。然后它调用普通套接字层将加密的数据包传输到服务器。服务器的套接字层接收数据包,然后调用 SSL 包对数据包进行解密。如果数据包不符合 SSL 格式,您将收到不支持版本异常。

到达套接字层的所有字节都将发送到 SSL 包。因此,出现该错误的最简单方法是在建立 SSL 连接后使用纯套接字层传输纯文本消息。

在我的特定情况下,我遇到了此错误消息,因为我正在传输额外的字节。让我们看看我能否清楚地解释我的错误。

我有一个(例如)100 字节的缓冲区。我用 50 字节消息打包缓冲区并调用 SSL 加密例程。生成的数据包长度为 75 字节。我调用 send() 来传输缓冲区。这是一个普通的套接字发送;它执行了我告诉它执行的操作,即传输整个 100 字节缓冲区。

服务器接收了全部 100 字节。SSL 包尝试解密该数据包。它发现接收到的前 75 个字节中封装了一条完美的 SSL 消息。到目前为止,一切都很好。然后它试图找出剩余的 25 个字节的含义。它假定这是第二条 SSL 消息并尝试对其进行解密。就在那时,它窒息并踢出了那个令人讨厌的异常。

我希望这能为您提供一些有关在代码中查找内容的线索。