You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@brooklyn.apache.org by "Mark McKenna (JIRA)" <ji...@apache.org> on 2017/03/27 17:21:41 UTC

[jira] [Comment Edited] (BROOKLYN-456) "SSLException: internal_error" upon trying to connect to site requiring SNI

    [ https://issues.apache.org/jira/browse/BROOKLYN-456?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15943671#comment-15943671 ] 

Mark McKenna edited comment on BROOKLYN-456 at 3/27/17 5:21 PM:
----------------------------------------------------------------

[~geomacy] I just tried the below test code pointing at https://httpbin.org/get and it worked ... Although i believe there is something up with the ssl cert as i had to trust all certs 

Apache httpclient 4.5.2

{code}
public void testApacheHttpClent() throws IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    final CloseableHttpClient httpclient = HttpClients.custom()
            .setSSLContext(new SSLContextBuilder().loadTrustMaterial((chain, authType) -> true).build())
            .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();
    try {
        final HttpGet httpget = new HttpGet("https://httpbin.org/get");
        System.out.println("Executing request " + httpget.getRequestLine());
        // Create a custom response handler
        final ResponseHandler<String> responseHandler = response -> {
            int status = response.getStatusLine().getStatusCode();
            if (status >= 200 && status < 300) {
                final HttpEntity entity = response.getEntity();
                return entity != null ? EntityUtils.toString(entity) : null;
            } else {
                throw new ClientProtocolException("Unexpected response status: " + status);
            }
        };
        String responseBody = httpclient.execute(httpget, responseHandler);
        System.out.println("----------------------------------------");
        System.out.println(responseBody);
    } finally {
        httpclient.close();
    }
}
{code}

cc [~aled.sage@gmail.com]


was (Author: m4rkmckenna):
[~geomacy] I just tried the below test code pointing at https://httpbin.org/get and it worked ... Although i believe there is something up with the ssl cert as i had to trust all certs 


{code}
public void testApacheHttpClent() throws IOException, KeyStoreException, NoSuchAlgorithmException, KeyManagementException {
    final CloseableHttpClient httpclient = HttpClients.custom()
            .setSSLContext(new SSLContextBuilder().loadTrustMaterial((chain, authType) -> true).build())
            .setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE).build();
    try {
        final HttpGet httpget = new HttpGet("https://httpbin.org/get");
        System.out.println("Executing request " + httpget.getRequestLine());
        // Create a custom response handler
        final ResponseHandler<String> responseHandler = response -> {
            int status = response.getStatusLine().getStatusCode();
            if (status >= 200 && status < 300) {
                final HttpEntity entity = response.getEntity();
                return entity != null ? EntityUtils.toString(entity) : null;
            } else {
                throw new ClientProtocolException("Unexpected response status: " + status);
            }
        };
        String responseBody = httpclient.execute(httpget, responseHandler);
        System.out.println("----------------------------------------");
        System.out.println(responseBody);
    } finally {
        httpclient.close();
    }
}
{code}

cc [~aled.sage@gmail.com]

> "SSLException: internal_error" upon trying to connect to site requiring SNI
> ---------------------------------------------------------------------------
>
>                 Key: BROOKLYN-456
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-456
>             Project: Brooklyn
>          Issue Type: Bug
>            Reporter: Geoff Macartney
>            Priority: Minor
>
> On 17th March brooklyn-server builds began failing, such as https://builds.apache.org/view/Brooklyn/job/brooklyn-server-master/492/. 
> The errors were failures in tests 
> {quote}
> org.apache.brooklyn.camp.brooklyn.HttpCommandEffectorYamlRebindTest.testRebindWhenHealthy
> org.apache.brooklyn.camp.brooklyn.HttpCommandEffectorYamlTest.testHttpCommandEffectorWithParameters
> org.apache.brooklyn.camp.brooklyn.CompositeEffectorYamlRebindTest.testRebindWhenHealthy
> org.apache.brooklyn.camp.brooklyn.CompositeEffectorYamlTest.testCompositeEffector
> {quote}
> all of which issued requests to "https://httpbin.org" for test purposes.
> There seems to have been a change in configuration on httpbin.org on the 16h of March, see [here|https://lists.apache.org/thread.html/2d7bfb556b5459590d266d079043861bc34c0b921a2b5346ae9fd8ae@%3Cdev.brooklyn.apache.org%3E].
> However the certificate changes appear not to be the problem, as far as I can tell, as the certificate chain from the site has root "Let's Encrypt Authority X3" (SHA1 Fingerprint=E6:A3:B4:5B:06:2D:50:9B:33:82:28:2D:19:6E:FE:97:D5:95:6C:CB), which is signed by CA "DST Root CA X3"  (Certificate fingerprint DA:C9:02:4F:54:D8:F6:DF:94:93:5F:B1:73:26:38:CA:6A:D7:7C:13), which is in the cacerts file of Java 8 by default.
> I believe the problem lies on the Java SSL client side, specifically that the client is not including the SNI (Server Naming Indicator) extension in the SSL handshake.  httpbin requires this, compare 
> {code}
> openssl s_client -showcerts -connect httpbin.org:443  </dev/null
> CONNECTED(00000003)
> 7944:error:140790E5:SSL routines:SSL23_WRITE:ssl handshake failure:/BuildRoot/Library/Caches/com.apple.xbs/Sources/OpenSSL098/OpenSSL098-59.60.1/src/ssl/s23_lib.c:185:
> {code}
> with the output from 
> {code}
> openssl s_client -servername httpbin.org  -showcerts -connect httpbin.org:443  </dev/null
> {code}
> The result is that the connection attempt fails with 
> {code}
> SSLException: Received fatal alert: internal_error
> {code}
> Searching around the web there seem to be a number of other people who have encountered this problem, e.g. https://forums.aws.amazon.com/message.jspa?messageID=669911.  The issue seems to be fixed only in Java 9, but there may be workarounds on 7 and 8. I haven't tried these out yet. 
> I will look at adding a test in Brooklyn to record this.



--
This message was sent by Atlassian JIRA
(v6.3.15#6346)