Forum Discussion

simbasister's avatar
simbasister
Frequent Visitor
4 years ago

how to solve javax.net.ssl.SSLHandshakeException when I called power bi api

I have got access token and created client by using this access token. But when i called power bi api like below

client.getReportsOperations().getReportInGroup(workspaceId, reportId)

it throws javax.net.ssl.SSLHandshakeException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target

how could i solve it? Do i need to install one certificate? Which one and How? 

4 Replies

  • Anonymous's avatar
    Anonymous
    Not applicable

    Hi simbasister ,

    Are you calling the two REST API below? Are you using the embedded analytics solution: Embed content for customers? And it embed with a service principal and a certificate? Could you please provide a screenshot of the error message that occurred and some of the operations you took?

    Reports - Get Reports

    Reports - Get Reports In Group

    In addition, please review the following links. Hope they can help you solve the problem.

    PKIX PATH BUILDING FAILED: UNABLE TO FIND VALID CERTIFICATION PATH TO REQUESTED TARGET

    How To Use REST API's


    You have to create a custom connector for using OAUTH2. There are some very good tutorials here: https://github.com/Microsoft/DataConnectors

    https://github.com/Microsoft/DataConnectors/blob/master/docs/m-extensions.md#implementing-an-oauth-f...


    Best Regards

  • simbasister's avatar
    simbasister
    Frequent Visitor

    Thank u. My codes and screenshots of the error message as below.

    get access token:

    public String getAccessToken() throws MalformedURLException, ExecutionException, InterruptedException {
    ConfidentialClientApplication app = createClientApplication();
    Set<String> resourceSet = new HashSet<>();
    resourceSet.add(resourceUrl);
    ClientCredentialParameters parameters = ClientCredentialParameters.builder(resourceSet).build();
    Future<IAuthenticationResult> future = app.acquireToken(parameters);
    String result = future.get().accessToken();
    return result;
    }

    private ConfidentialClientApplication createClientApplication() throws MalformedURLException {
    authorityUrl = authorityUrl.replace("organizations", tenantId);
    return ConfidentialClientApplication.builder(clientId, ClientCredentialFactory.createFromSecret(clientSecret)).
    authority(authorityUrl).
    build();
    }

    create power bi client:

    PowerBiClient client = PowerBiClient.getInstance(accessToken);

     get report in group:

    Report report = client.getReportsOperations().getReportInGroup(workspaceId, reportId);

    this code will throw SSLException as below:

     

     

    • Anonymous's avatar
      Anonymous
      Not applicable

      Hi simbasister ,

      This seems to be a SSL issue, you can refer to the links below to make troubleshooting to try to solve it.

      Java Exception Handling – SSLHandshakeException

      1. Generate a new key and storing it in a local keystore file:

      $ keytool -genkeypair -alias airbrake -keyalg RSA -validity 7 -keystore keystore
      

      2. Export the keystore to a local file:

      $ keytool -export -alias airbrake -keystore keystore -rfc -file airbrake.cer
      

      3. Import the certificate into the truststore. The best way to think of the difference between a keystore and truststore is that the keystore is used for private keys, while the truststore is for public certificates.

      $ keytool -import -alias airbrake -file airbrake.cer -keystore truststore
      

      4. Add the following to the SSLServer class:

      // SSLServer.java
      System.setProperty("javax.net.ssl.keyStore", "keystore");
      System.setProperty("javax.net.ssl.keyStorePassword", "password");
      

      5. Add the following to the SSLClient class:

      // SSLClient.java
      System.setProperty("javax.net.ssl.trustStore", "truststore");
      System.setProperty("javax.net.ssl.trustStorePassword", "password");

      How to solve javax.net.ssl.SSLHandshakeException Error?

      Troubleshooting SSL related issues (Server Certificate)

      Best Regards

      • simbasister's avatar
        simbasister
        Frequent Visitor

        It seems that I need obtain the public certificate from power bi server. Is that right? I tried many ways to dowload and save a copy. Unfortunatelly, there may be something wrong in obtaining one. If so, could you tell me how and where can I get the public certificate from power bi server? Then I can use keytool to install it. Thank you.