4

*.mydomain.com のワイルドカード証明書を持っています (名前は無実を保護するために変更されています...これは実際のドメインではありません :) )

正しく実装された Java HttpClient 4 を使用すると (この問題は FF では見られません)、HTTPS 経由で api.mydomain.com に対して行われたサービス呼び出しは成功しますが、mydomain.com (developer.mydomain) の非運用サブドメインに対して行われた同一のサービス呼び出し.com、api-beta.mydomain.com、api-uat.mydomain.com) は、以下のテスト ハーネス コードでこの例外を生成します。

javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated
at com.sun.net.ssl.internal.ssl.SSLSessionImpl.getPeerCertificates(SSLSessionImpl.java:352)
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:149)
at org.apache.http.impl.conn.AbstractPooledConnAdapter.open(AbstractPooledConnAdapter.java:121)
at org.apache.http.impl.client.DefaultRequestDirector.tryConnect(DefaultRequestDirector.java:573)
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)
at com.mydomain.httpclientexample.HttpClientTestv2.main(HttpClientTestv2.java:54)

developer.mydomain.com、api-beta.mydomain.com、および api-uat.mydomain.com の SLL 証明書は api.mydomain.com と同じ WC 証明書のように見えますが、api.mydomain では例外は見られません。 com ですが、他のサブドメインにあります。コードは api-na.mydomain.com で機能し、非運用サブドメインでも機能するはずです。

何か案は?

クライアント コード: ご覧のとおり、呼び出したい ADDRESS_VALIDATION_SERVICE_URI を簡単に変更できます。api.mydomain.com は SSLPeerUnverifiedException なしで動作します。他の 3 つの URI は例外をスローします...

package com.mydomain.httpclientexample;

import java.io.IOException;
import java.io.UnsupportedEncodingException;

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class HttpClientTestv2 {

//public final static String ADDRESS_VALIDATION_SERVICE_URI = "https://developer.mydomain.com/v1.0/stores/MYSTORE/address/validate.xml";
public final static String ADDRESS_VALIDATION_SERVICE_URI = "https://api-beta.mydomain.com/v1.0/stores/MYSTORE/address/validate.xml";
//public final static String ADDRESS_VALIDATION_SERVICE_URI = "https://api-uat.mydomain.com/v1.0/stores/MYSTORE/address/validate.xml";
//public final static String ADDRESS_VALIDATION_SERVICE_URI = "https://api.mydomain.com/v1.0/stores/MYSTORE/address/validate.xml";
public final static String APIKEY_ATTRIBUTE_NAME = "apikey";
public final static String APIKEY_ATTRIBUTE_VALUE = "2c90bc83e821364ffa557486c3e2a44e";


/**
 * @param args
 */
public static void main(String[] args) {

    DefaultHttpClient httpclient = new DefaultHttpClient();  
    HttpPost httpPost = new HttpPost(ADDRESS_VALIDATION_SERVICE_URI);
    System.out.println("executing request" + httpPost.getRequestLine());  

    //set a request header 
    httpPost.setHeader(APIKEY_ATTRIBUTE_NAME , APIKEY_ATTRIBUTE_VALUE);

    //add the xml body   
    StringEntity postBody = null;
    try {
        postBody = new StringEntity(getXMLDoc(),"UTF-8"); 
    } catch (UnsupportedEncodingException uee) {
        System.out.println("----------------------------------------");
        System.out.println("Exception Caught in UnsupportedEncodingException catch block");
        System.out.println("----------------------------------------");

        uee.printStackTrace();
    }   

    httpPost.setEntity(postBody);


    HttpResponse response;
    try {
        response = httpclient.execute(httpPost);

        HttpEntity entity = response.getEntity();  
        System.out.println("----------------------------------------");  
        System.out.println(response.getStatusLine());  

        if (entity != null) {  
            System.out.println("Response content length: " + entity.getContentLength());
            System.out.println("Content:" + EntityUtils.toString(entity));
            EntityUtils.consume(entity);
            //          entity.consumeContent();  
        }  


    } catch (ClientProtocolException e) {

        System.out.println("----------------------------------------");
        System.out.println("Exception Caught in ClientProtocolException catch block");
        System.out.println("----------------------------------------");

        e.printStackTrace();
    } catch (IOException e) {

        System.out.println("----------------------------------------");
        System.out.println("Exception Caught in ClientProtocolException catch block");
        System.out.println("----------------------------------------");

        e.printStackTrace();
    }  

    // When HttpClient instance is no longer needed,   
    // shut down the connection manager to ensure  
    // immediate deallocation of all system resources  
    httpclient.getConnectionManager().shutdown();          

}





private static String getXMLDoc() {

    StringBuffer XMLDoc = new StringBuffer("<?xml version=\"1.0\" encoding=\"UTF-8\"?><AddressValidationRequest xmlns=\"http://api.mydomain.com/schema/checkout/1.0\">") 
    .append("<Header><MaxAddressSuggestions>5</MaxAddressSuggestions></Header>") 
    .append("<Address><Line1>17243 S. Mill Ln</Line1><Line2/><City>Ocean View</City><MainDivision>DE</MainDivision><CountryCode>US</CountryCode><PostalCode>19970</PostalCode></Address>") 
    .append("</AddressValidationRequest>"); 

    return XMLDoc.toString();

}



}
4

0 に答える 0