認識されないSSLメッセージ、プレーンテキスト接続?例外


172

私はネット上のhttpsサーバーと話すJava準拠パッケージを持っています。コンパイルを実行すると、次の例外が発生します。

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サーバーに接続するためにローカルマシンまたはポートを構成する方法はありますか?

回答:


238

これは、クライアントマシンで確立された接続が安全でないためだと思います。

これは、HTTPSサーバーではなく、HTTPサーバーと通信しているためです。おそらく、HTTPSに正しいポート番号を使用していません。


7
同じエラーが発生し、httpsの代わりにhttpを使い始めたときに解決しました。しかし、httpsでブラウザにリンクを配置すると、機能します!安全なクエリを実行する必要があります。どうすれば問題を解決できますか?
ccoutinho 2014年

9
@rsy「リンクを... httpsで配置」すると、ブラウザはポート443に変更されます。自分でも同じことができます。実際HttpURLConnection、ポートを指定しない場合は、自動的に行われます。
ローンの侯爵2014年

サーバーの任意のポートをHTTPSに設定できると思いますが、特定のポートである必要はありませんか?

1
@KarlSherwin予約に従って、好きなポートを指定できますが、それが443でない場合は、すべてのURLで自分の周りをカートに入れる必要があります。
ローンの侯爵

18
javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection?

メールサーバーに接続して新しい接続を確立するローカルSMTPドメイン名が必要です。また、以下のプログラミングでSSLプロパティを変更する必要があります

javax.net.ssl.SSLException: Unrecognized SSL message, plaintext connection

 props.put("mail.smtp.socketFactory.fallback", "true"); // Should be true

10
彼はSMTPではなくHTTPSを話します。-1
ローン侯爵

2
うまくいった私の場合、ありがとう!javax.mail.MessagingException:SMTPホストに接続できませんでした:mail.livemusicgo.com、ポート:25; ネストされた例外は次のとおりです:javax.net.ssl.SSLException:認識されないSSLメッセージ、プレーンテキスト接続?
surfealokesea 14

1
@surfealokesea質問はHTTPとHTTPSに関するものであり、SMTPに関する回答や個人的な経験は関係ありません。
ローン侯爵

1
はい、しかしこれは彼のためだけではなく、これと同じ「認識されていないsslメッセージ」を持っている他のユーザーのためのものです。+1 to you、Thobith
sam1370 '27

9

プロキシ経由でPOSTリクエストを実行する前に、会社のファイアウォールにログインするのを忘れたときにも同じエラーメッセージが表示されました。


社内にいても同じことをしなくちゃ!
2016年

1
解決方法を簡単に説明していただけますか。私も同じように私の会社で同じ問題に直面しています
Nitesh

3

同じエラーが発生しました。httpを使用してhttpsポートにアクセスしていたためです。httpをhttpsに変更すると問題が解決しました。


11
いいえ、HTTPS経由でHTTPポートにアクセスするとエラーが発生します。エラーメッセージを読んでください。プレーンテキストターゲットに接続しました。あなたが説明した状況は、SSLを使用していなかったので、SSLExceptionの原因ではなかったでしょう。
ローン侯爵2015

1

Jdevelopr 11.1.1.7 IDEに組み込まれたJavaアプリケーションから同じ問題に直面しています。プロキシフォームのプロジェクトプロパティの使用をオフにすることで問題を解決しました。

次の場所にあります:プロジェクトのプロパティ->(左パネルから)実行/デバッグ/プロファイル->右パネルから(編集)をクリック->左パネルからツール設定->(プロキシを使用)オプションのチェックを外します。


1

後で誰かを助けるかもしれないので、これを答えとして追加します。

エラーを解決するには、jvmでIPv4スタックを使用する必要がありました。私のアプリケーションは以前は企業ネットワーク内で機能していましたが、自宅から接続しているときにも同じ例外が発生しました。プロキシは含まれません。jvm引数が追加され、 -Djava.net.preferIPv4Stack=trueすべてのhttpsリクエストが正常に動作していました。


1

Springを使用してローカルで実行している場合は、以下を使用することをお勧めします。

@Bean
public AmazonDynamoDB amazonDynamoDB() throws IOException {
    return AmazonDynamoDBClientBuilder.standard()
            .withCredentials(
                    new AWSStaticCredentialsProvider(
                            new BasicAWSCredentials("fake", "credencial")
                    )
            )
            .withClientConfiguration(new ClientConfigurationFactory().getConfig().withProtocol(Protocol.HTTP))
            .withEndpointConfiguration(new AwsClientBuilder.EndpointConfiguration("localhost:8443", "central"))
            .build();
}

単体テストを使用して私のために動作します。

お役に立てば幸いです。


0

それは私のために今働いた、私は以下のように私のgoogleアカウントの設定を変更しました:

        System.out.println("Start");
        final String username = "myemail@gmail.com";
        final String password = "************";

        Properties props = new Properties();
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.host", "smtp.gmail.com");
        props.put("mail.smtp.port", "465");
        props.put("mail.transport.protocol", "smtp");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");

         Session session = Session.getInstance(props,
                  new javax.mail.Authenticator() {
                    protected PasswordAuthentication getPasswordAuthentication() {
                        return new PasswordAuthentication(username, password);
                    }
                  });


        try {
            Transport transport=session.getTransport();
            Message message = new MimeMessage(session);
            message.setFrom(new InternetAddress("myemail@gmail.com"));//formBean.getString("fromEmail")
            message.setRecipients(Message.RecipientType.TO,InternetAddress.parse("myemail@gmail.com"));
            message.setSubject("subject");//formBean.getString(
            message.setText("mailBody");
            transport.connect();
            transport.send(message, InternetAddress.parse("myemail@gmail.com"));//(message);

            System.out.println("Done");

        } catch (MessagingException e) {
            System.out.println("e="+e);
            e.printStackTrace();
            throw new RuntimeException(e);

        }

同じ投稿のこのリンクでプログラムを実行しているときにSSLとTSLを有効にしましたが。私は多くの時間を費やしていますが、このリンクに気付いて見つけました。そして、グーグルで2つの次のステップと設定コントロールを行いました。:

  • 2段階認証プロセスを無効にする(パスワードとOTP)

  • 安全性の低いアプリへのアクセスを許可できるようにします(安全性の低いアプリを許可:オン。

これで、上記のプログラムを使用してメールを送信できるようになりました。


3
問題はHTTPSについてです。
ローン侯爵

0

EJPが言ったように、それは非httpsプロトコルへの呼び出しのために表示されるメッセージです。HTTPSであることが確実な場合は、バイパスプロキシ設定を確認してください。バイパスプロキシリストにWebサービスホストのURLを追加してください。


0

接続がFTPSテストの場合:

FTPSClient ftpClient = new FTPSClient(protocol、false);

protocol = TLS、SSLおよびfalse = isImplicit。



0

ここで非常に重要な回答:

(メソッド内の)API URL文字列をhttpsからhttpに変更するだけです。これも原因である可能性があります。

client.resource("http://192.168.0.100:8023/jaxrs/tester/tester");

の代わりに

client.resource("https://192.168.0.100:8023/jaxrs/tester/tester");

-1

同じ問題が発生し、システムのプロパティで「proxyUser」と「proxyPassword」を設定することで解決しました。

System.setProperty("http.proxyUser", PROXY_USER);
System.setProperty("http.proxyPassword", PROXY_PASSWORD);

「proxyHost」および「proxyPort」とともに

System.setProperty("http.proxyHost", PROXY_ADDRESS);
System.setProperty("http.proxyPort", PROXY_PORT);

それがうまくいくことを願っています。


Apache HTTPクライアントを使用していて、認証例外が発生した場合に機能します。それはなりません OPで述べた問題を解決するために働きます。
ローン侯爵

-1

ポート25とフォロープロップを使用して問題を解決しました

mailSender.javaMailProperties.putAll([
                "mail.smtp.auth": "true",
                "mail.smtp.starttls.enable": "false",
                "mail.smtp.ssl.enable": "false",
                "mail.smtp.socketFactory.fallback": "true",
        ]);

-1

あなたが走っている場合

  • Cisco AnyConnectセキュアモビリティエージェント
  • Cisco AnyConnect Webセキュリティエージェント

サービスを停止してみてください。

なぜこの回答に反対票を投じたのかわかりません。私たちの企業ネットワークでは、これが問題の解決策です。


-1

camel-mailコンポーネントを使用して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>

いいえ、ソリューションはプレーンテキストのポートに変更されていました。
ローンの侯爵

-2

Java 6以前のコマンドラインからJavaプロセスを実行している場合、このスイッチを追加すると、上記の問題が解決しました。

-Dhttps.protocols = "TLSv1"


-3

多分あなたのデフォルトの認定証は期限切れです。管理コンソールから更新するには、「セキュリティー」>「SSL証明書および鍵管理」>「鍵ストアおよび証明書」>「NodeDefaultKeyStore」>「個人証明書」に進み、「デフォルト」の別名を選択し、「更新」をクリックしてからWASを再始動します。


1
証明書の有効期限が切れても、この例外は発生しません。
ローン侯爵、2015

-3

もう1つの理由は、「アクセス拒否」である可能性があります。URIにアクセスできず、内部ネットワークアクセスのブロッキング応答ページを受信できない可能性があります。アプリケーションゾーンにファイアウォールルールが必要かどうかわからない場合は、ターミナル、コマンドラインから接続を試みます。GNU / LinuxまたはUnixの場合、次のコマンドのように実行してみて、結果がブロックルールまたは実際にリモートアドレスからのものであることを確認できます。echo | nc -v yazilimcity.net 443


何らかの種類のページを受け取った場合、SSL部分は完全に機能しており、OPから引用された例外はありません。
ローン侯爵

SSLの部分でどのようなページも受信していません。特別に準備されたページである内部ネットワークHTTP応答を受信しました。このシナリオでは、HTTPSリクエストを介してHTTPページにアクセスしているため、この例外を受け取りました。ネットワークルールが変更されると、この例外も自動的に解決されます。
oguzhankinik 2018
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.