从android应用程序调用API时获取javax.net.ssl.SSLHandshakeException
我正面临一个非常奇怪的错误和应用程序行为 我在服务器.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.从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
这没有意义
- 使用我为User2获得的访问令牌从Postman调用API(it) 工作,我得到了数据)
- 清除手机上的共享首选项
- 第一次尝试从不同的手机安装应用程序
- 尝试使用新用户User3(得到与User2相同的结果)
@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)