我有一个java编译包与https服务器在网上说话。运行编译会出现以下异常:

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?
    at com.sun.net.ssl.internal.ssl.InputRecord.handleUnknownRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.performInitialHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at com.sun.net.ssl.internal.ssl.SSLSocketImpl.startHandshake(Unknown Source)
at sun.net.www.protocol.https.HttpsClient.afterConnect(Unknown Source)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(Unknown Source)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.connect(Unknown Source)

我认为这是因为与客户端机器建立的连接不安全。是否有任何方法配置本地机器或端口以连接到远程https服务器?


当前回答

正如EJP所说,这是由于调用非https协议而显示的消息。 如果你确定它是HTTPS,检查你的旁路代理设置,并在这种情况下将你的webservice主机url添加到旁路代理列表

其他回答

如果连接是FTPS test:

FTPSClient ftpClient =新的FTPSClient(协议,false);

protocol = TLS,SSL and false = isImplicit。

我有类似的错误使用骆驼邮件组件发送电子邮件的gmail smtp。

解决方案从TLS端口(587)更改为SSL端口(465),如下所示:

<route id="sendMail">
  <from uri="jason:toEmail"/>
  <convertBodyTo type="java.lang.String"/>
  <setHeader headerName="Subject"><constant>Something</constant></setHeader>
  <to uri="smtps://smtp.gmail.com:465?username=myemail@gmail.com&amp;password=mypw&amp;to=someemail@gmail.com&amp;debugMode=true&amp;mail.smtp.starttls.enable=true"/>
</route>

正如EJP所说,这是由于调用非https协议而显示的消息。 如果你确定它是HTTPS,检查你的旁路代理设置,并在这种情况下将你的webservice主机url添加到旁路代理列表

可能您的默认证书已经过期。通过管理控制台执行“安全>SSL证书和密钥管理>密钥存储和证书> NodeDefaultKeyStore >个人证书”选择“默认”别名,然后重新启动WAS后单击“更新”。

如果您使用的是Jetty版本9或更早的版本,则需要将其添加到Jetty 通过

RUN java -jar ${JETTY_HOME}/start.jar --add-to-startd=https

根据这个 Jetty:如何在Jetty客户端使用SSL

从Jetty版本10,它应该工作出来的盒子