Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从android应用程序调用API时获取javax.net.ssl.SSLHandshakeException_Java_Android_Ssl - Fatal编程技术网

从android应用程序调用API时获取javax.net.ssl.SSLHandshakeException

从android应用程序调用API时获取javax.net.ssl.SSLHandshakeException,java,android,ssl,Java,Android,Ssl,我正面临一个非常奇怪的错误和应用程序行为 我在服务器.net核心API上使用Identity Server 4,在android应用程序中使用AppAuth 在我在Identity Server 4上添加User2之前,User1的一切都很好。 我正常登录,得到了访问令牌、刷新令牌、声明,当我调用Api获取数据时,我得到了javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trust

我正面临一个非常奇怪的错误和应用程序行为

我在服务器.net核心API上使用Identity Server 4,在android应用程序中使用AppAuth

在我在Identity Server 4上添加User2之前,User1的一切都很好。 我正常登录,得到了访问令牌、刷新令牌、声明,当我调用Api获取数据时,我得到了javax.net.ssl.SSLHandshakeException:java.security.cert.CertPathValidatorException:Trust anchor for certification path not found.
这没有意义

  • 当我以User1身份登录时,它工作正常
  • 在我的服务器上,我有有效的让我们加密SSL证书
  • 我试过:

    • 使用我为User2获得的访问令牌从Postman调用API(it) 工作,我得到了数据)
    • 清除手机上的共享首选项
    • 第一次尝试从不同的手机安装应用程序
    • 尝试使用新用户User3(得到与User2相同的结果)
    我假设,因为我从API获得数据,从userinfo端点获得用户声明,这就是它的Android问题。 我真的不知道是什么导致了这个错误。 以下是相关代码:

    @MainThread
    private void fetchInventories() {
        mAuthStateManager.getCurrent().performActionWithFreshTokens(mAuthService, this::fetchInventories);
    }
    
    @WorkerThread
    private void fetchInventories(String accessToken, String idToken, AuthorizationException ex) {
        Log.i("INVENTORY", "Fetching Inventories");
        //runOnUiThread(() -> displayLoadingBar());
        if (ex != null) {
            Log.e(TAG, "Token refresh failed when fetching inventories");
            return;
        }
    
        URL inventoryEndpoint;
        try {
            inventoryEndpoint = new URL(AuxilliaApp.UserClaims.getInventoryClaims().getInventoryLocation()+"/inventories");
        } catch (MalformedURLException urlEx) {
            Log.e(TAG, "Failed to construct inventories endpoint URL", urlEx);
            return;
        }
    
        mExecutor.submit(() -> {
            try {
                final InventoryActivity activity = mActivityReference.get();
                HttpURLConnection conn =
                        (HttpURLConnection) inventoryEndpoint.openConnection();
                conn.setRequestProperty("Authorization", "Bearer " + accessToken);
                conn.setInstanceFollowRedirects(false);
                String response = Okio.buffer(Okio.source(conn.getInputStream())).readString(Charset.forName("UTF-8"));
                mInventoryItems.set(new JSONArray(response));
                mInventoryAdapter = new ListViewInventoryAdapter(activity, mInventoryItems.get());
                runOnUiThread(new Runnable() {
                    public void run() {
                        mInventoryList.setAdapter(mInventoryAdapter);
                        mInventoryAdapter.notifyDataSetChanged();
                    }
                });
    
                mInventoryList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
                    @Override
                    public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                        Inventory selectedItem = (Inventory) parent.getItemAtPosition(position);
                        Intent intent = new Intent(activity, InventoryEntriesActivity.class);
                        intent.putExtra("Inventory", selectedItem);
                        activity.startActivity(intent);
                    }
                });
    
            } catch (IOException ioEx) {
                Log.e(TAG, "Network error when querying inventory endpoint", ioEx);
            } catch (JSONException jsonEx) {
                Log.e(TAG, "Failed to parse inventory response");
            }
        });
    }
    

    我找到了解决这一胡说八道的办法

    我的声明在api url位置缺少端口,所以我得到了一些其他证明。。。 我发现,通过进入http请求中调用的每个方法,并找到从服务器获得的证书

    对不起,伙计们

    E/InventoryActivity: Network error when querying inventory endpoint
        javax.net.ssl.SSLHandshakeException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
            at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:368)
            at com.android.okhttp.Connection.connectTls(Connection.java:1510)
            at com.android.okhttp.Connection.connectSocket(Connection.java:1458)
            at com.android.okhttp.Connection.connect(Connection.java:1413)
            at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1700)
            at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:133)
            at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466)
            at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371)
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503)
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438)
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247)
            at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210)
            at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java)
            at rs.co.ines.auxillia.inventory.InventoryActivity.lambda$fetchInventories$0$InventoryActivity(InventoryActivity.java:179)
            at rs.co.ines.auxillia.inventory.-$$Lambda$InventoryActivity$3H-9hA4vU25grEofstNCoXP43Kk.run(lambda)
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428)
            at java.util.concurrent.FutureTask.run(FutureTask.java:237)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607)
            at java.lang.Thread.run(Thread.java:762)
         Caused by: java.security.cert.CertificateException: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
            at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:546)
            at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:427)
            at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:491)
            at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:387)
            at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:361)
            at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:290)
            at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94)
            at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88)
            at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:178)
            at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:617)
            at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method)
            at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:364)
            at com.android.okhttp.Connection.connectTls(Connection.java:1510) 
            at com.android.okhttp.Connection.connectSocket(Connection.java:1458) 
            at com.android.okhttp.Connection.connect(Connection.java:1413) 
            at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1700) 
            at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:133) 
            at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466) 
            at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371) 
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503) 
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438) 
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247) 
            at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 
            at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java) 
            at rs.co.ines.auxillia.inventory.InventoryActivity.lambda$fetchInventories$0$InventoryActivity(InventoryActivity.java:179) 
            at rs.co.ines.auxillia.inventory.-$$Lambda$InventoryActivity$3H-9hA4vU25grEofstNCoXP43Kk.run(lambda) 
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
            at java.lang.Thread.run(Thread.java:762) 
         Caused by: java.security.cert.CertPathValidatorException: Trust anchor for certification path not found.
            at com.android.org.conscrypt.TrustManagerImpl.verifyChain(TrustManagerImpl.java:546) 
            at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:427) 
            at com.android.org.conscrypt.TrustManagerImpl.checkTrustedRecursive(TrustManagerImpl.java:491) 
            at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:387) 
            at com.android.org.conscrypt.TrustManagerImpl.checkTrusted(TrustManagerImpl.java:361) 
            at com.android.org.conscrypt.TrustManagerImpl.getTrustedChainForServer(TrustManagerImpl.java:290) 
            at android.security.net.config.NetworkSecurityTrustManager.checkServerTrusted(NetworkSecurityTrustManager.java:94) 
            at android.security.net.config.RootTrustManager.checkServerTrusted(RootTrustManager.java:88) 
            at com.android.org.conscrypt.Platform.checkServerTrusted(Platform.java:178) 
            at com.android.org.conscrypt.OpenSSLSocketImpl.verifyCertificateChain(OpenSSLSocketImpl.java:617) 
            at com.android.org.conscrypt.NativeCrypto.SSL_do_handshake(Native Method) 
            at com.android.org.conscrypt.OpenSSLSocketImpl.startHandshake(OpenSSLSocketImpl.java:364) 
            at com.android.okhttp.Connection.connectTls(Connection.java:1510) 
            at com.android.okhttp.Connection.connectSocket(Connection.java:1458) 
            at com.android.okhttp.Connection.connect(Connection.java:1413) 
            at com.android.okhttp.Connection.connectAndSetOwner(Connection.java:1700) 
            at com.android.okhttp.OkHttpClient$1.connectAndSetOwner(OkHttpClient.java:133) 
            at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:466) 
            at com.android.okhttp.internal.http.HttpEngine.sendRequest(HttpEngine.java:371) 
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:503) 
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:438) 
            at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getInputStream(HttpURLConnectionImpl.java:247) 
            at com.android.okhttp.internal.huc.DelegatingHttpsURLConnection.getInputStream(DelegatingHttpsURLConnection.java:210) 
            at com.android.okhttp.internal.huc.HttpsURLConnectionImpl.getInputStream(HttpsURLConnectionImpl.java) 
            at rs.co.ines.auxillia.inventory.InventoryActivity.lambda$fetchInventories$0$InventoryActivity(InventoryActivity.java:179) 
            at rs.co.ines.auxillia.inventory.-$$Lambda$InventoryActivity$3H-9hA4vU25grEofstNCoXP43Kk.run(lambda) 
            at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:428) 
            at java.util.concurrent.FutureTask.run(FutureTask.java:237) 
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1133) 
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:607) 
            at java.lang.Thread.run(Thread.java:762)