代码之家  ›  专栏  ›  技术社区  ›  delucaezequiel

Azure连接无法连接证书错误

  •  1
  • delucaezequiel  · 技术社区  · 7 年前

    public abstract class Azure
    {
        private final static String GRAPH = "https://graph.windows.net/";
        private Logger objLogger;
        private String strAccessToken;
        private String strTenantID;
        private String strLogin;
        private String strAuthorize;
        private String strGraph;
        private String strApplicationID;
        private String strUsername;
        private String strPassword;
        public String getAccessToken() throws InvalidKeyException, MalformedURLException, ServiceUnavailableException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException, InterruptedException, ExecutionException
        {
            if (this.strAccessToken == null)
            {
                this.setAccessToken();
            }
            return this.strAccessToken;
        }
        private void setAccessToken() throws MalformedURLException, InterruptedException, ExecutionException, ServiceUnavailableException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException, NoSuchAlgorithmException, NoSuchPaddingException
        {
            AuthenticationContext objContext;
            AuthenticationResult objToken;
            ExecutorService objService;
            Future<AuthenticationResult> objFuture;
            objService = null;
            objToken = null;
            try
            {
                objService = Executors.newFixedThreadPool(1);
                objContext = new AuthenticationContext(this.getAuthorize(), false, objService);
                objFuture = objContext.acquireToken(GRAPH, this.getApplicationID(), this.getUsername(), this.getPassword(), null);
                objToken = objFuture.get();
                this.getLogger().info("Connection to Azure ".concat(this.getClass().getSimpleName().toLowerCase()).concat(" successfully stablished"));
            }
            finally
            {
                objService.shutdown();
            }
            if (objToken == null)
            {
                throw new ServiceUnavailableException("Authentication Service is not available");
            }
            this.strAccessToken = objToken.getAccessToken();
        }
        public void setGraph()
        {
            this.strGraph = GRAPH.concat(this.getTenantID());
        }
    }
    
    public class Connection1 extends Azure
    {
        private static Connection1 objInstance;
        private Connection1() throws ParameterException, IOException, ParserConfigurationException, SAXException
        {
            super();
            this.setTenantID(<Tenant ID>);
            this.setLogin("https://login.microsoftonline.com/".concat(this.getTenantID()));
            this.setAuthorize(this.getLogin().concat("/oauth2/authorize"));
            this.setGraph();
            this.setApplicationID(<Application ID>);
            this.setAccessToken(null);
            this.setUsername(<username>);
            this.setPassword(<password>);
            this.setLogger();
        }
        public static Azure getInstance() throws ParameterException, IOException, ParserConfigurationException, SAXException
        {
            if (objInstance == null)
            {
                objInstance = new Connection1();
            }
            return objInstance;
        }
    }
    

    我有两个班,连接1和连接2。

    1) 租户ID

    2) 应用程序ID

    4) 密码。

    这个问题来自Connection2,在这个问题上,我得到了以下错误:

    [pool-3-thread-1] ERROR com.microsoft.aad.adal4j.AuthenticationContext - [Correlation ID: 63cc6344-2bc1-4f61-aaa0-a2f07acb172b] Execution of class com.microsoft.aad.adal4j.AcquireTokenCallable failed.
    javax.net.ssl.SSLHandshakeException: sun.security.validator.ValidatorException: PKIX path building failed: sun.security.provider.certpath.SunCertPathBuilderException: unable to find valid certification path to requested target
    

    “DigiCert巴尔的摩根”

    2 回复  |  直到 7 年前
        1
  •  1
  •   delucaezequiel    7 年前

        2
  •  0
  •   Peter Pan    7 年前

    根据您的错误信息,下面有两个博客,您可以参考它们来解决此问题 unable to find valid certification path to requested target .

    1. https://www.mkyong.com/webservices/jax-ws/suncertpathbuilderexception-unable-to-find-valid-certification-path-to-requested-target/
    2. http://nodsw.com/blog/leeland/2006/12/06-no-more-unable-find-valid-certification-path-requested-target

    InstallCert 到可以添加到本地密钥库的服务器证书。请遵循GitHub存储库的自述。

    同时,我只是猜测,我认为一个可能的原因是JVM中证书存储的资源竞争。所以如果你在跑步 Connection1 Connection2 在JVM实例中,您可以尝试在它们自己的独立JVM实例上单独运行它们,或者尝试复制 JAVA_HOME 爪哇之家酒店 & PATH 连接2 没有任何与他们共享的资源。