我有一个基于spring引导的微服务,其中我使用Microsoft Azure计算机视觉API从PDF文件读取数据。容器化微服务后,容器工作良好,我能够发送/接收数据到/从我的机器上的计算机视觉API。但是,当我在基于Azure的Linux虚拟机上运行此容器时,容器无法与计算机视觉API通信并抛出异常java.lang.RuntimeException: javax.net.ssl.SSLKeyException: RSA premaster secret error
。此外,spring-boot jar能够与VM上的Azure通信,并且不会抛出这样的异常。
你认为我需要传递任何自签名证书到容器,使其能够顺利通信吗?
我认为使用这些容器的最大优点是它使代码与平台无关。那么,为什么这个错误只在Azure VM上抛出,而在我的机器上运行完全正常?请建议。
java.lang.RuntimeException: javax.net.ssl.SSLKeyException: RSA premaster secret error
在本地计算机上工作正常,但当在Azure Linux VM上运行容器时,它不工作,因此Linux VM和Java JRE之间可能存在兼容性问题。基于上述错误的解决方案是从您的服务器类路径中删除更新的java版本,并尝试安装旧的java版本
请参考这个链接,上面的错误在这里有相同的讨论:https://community.oracle.com/tech/developers/discussion/1533888/another-rsa-premaster-secret-error
第二,尝试在java面板中设置SSL/TLS参数,因为SSL证书是web服务器上的一段代码,为在线通信提供安全。当web浏览器与您的安全网站联系时,SSL证书启用加密连接。这有点像在寄信之前把信封在信封里。
JDK版本支持的SSL/TLS版本
我能够找出错误是什么。JDK/JRE设置没有任何问题。此问题是由于Azure VM上安装的docker引擎版本导致的。
基于Azure的计算机视觉api要求服务器兼容TLS1.2,而我机器上安装的docker引擎版本较旧,不支持TLS1.2。在将docker引擎升级到最新版本后,我能够修复它。