1

私はhttpClientを使用してhttps-baseAPIへの接続文字列を書き込もうとしていますが、ユーザー名/パスワードの認証には少し注意が必要です。

Appache commons base64エンコーダーを使用すると、コンストラクターにバイトの配列を渡す必要があります。認証はemail @ companyName:passwordである必要がありますが、@記号はbase 64コンバーターでサポートされていません(0-9 azまたはazではないため)。または/+)、ただし、認証する前にこれを明らかに解決する必要があります。

コード(要求される前):

import org.apache.commons.codec.binary.Base64;
....
        String encoding = Base64.encodeBase64String("username@company.com:password");
        HttpPost httppost = new HttpPost("https://webapi.com/api/protectedarea");
        httppost.setHeader("Authorization", "Basic " + encoding);

完全なエラーコード:

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at sun.security.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:397)
at org.apache.http.conn.ssl.AbstractVerifier.verify(AbstractVerifier.java:128)
at org.apache.http.conn.ssl.SSLSocketFactory.connectSocket(SSLSocketFactory.java:397)
at org.apache.http.impl.conn.DefaultClientConnectionOperator.openConnection(DefaultClientConnectionOperator.java:148)
at org.apache.http.impl.conn.AbstractPoolEntry.open(AbstractPoolEntry.java:150)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:575)
at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:425)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:820)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:754)
at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:732)
4

2 に答える 2

2

問題は、文字列を二重にエンコードしていることです。最初に最初の行で、次に3番目の行で。

もう一方の端でダブルデコードしない限り、問題が発生します(そして、なぜそれを行うのでしょうか?)。

于 2012-05-14T15:30:47.277 に答える
1

サーバーに有効なSSL証明書がないようです。

私が過去に開発環境で行ったことは、新しいX509TrustManagerを実装することでした。これは、基本的に、証明書の資格情報が有効であることを確認することです。

于 2012-05-14T15:49:38.697 に答える