Невозможно вызвать api.backblaze.com из jboss - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь загрузить изображение в интернет-хранилище Backblaze. Я использую backblaze java -sdk, чтобы сделать звонок. При попытке загрузить изображение я получаю следующую ошибку:

2020-04-25 11:19:45,443 ERROR [stderr] (default task-10) <B2Exception 904 io_exception: 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 talking to https://api.backblazeb2.com/b2api/v2/b2_authorize_account>

Я не смог найти никакой информации о необходимости добавления каких-либо сертификатов на сайт Backblaze.

После некоторых исследований inte rnet, я узнал, что должен? добавьте сертификат backblaze в хранилище доверия моей установки java. Поэтому я скачал сертификат, используя chrome (сохраненный как файл .cer) из https://www.backblaze.com/ и установил его на свой java с помощью этой команды:

keytool -import -alias backblaze -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass <password> -keypass changeit -file .../backblaze.cer -noprompt

Я также могу увидеть это при выполнении этой команды:

keytool -list -v -keystore "%JAVA_HOME%/jre/lib/security/cacerts"

Есть запись с псевдонимом: backblaze

Использование опции VM -Djavax.net.debug=ssl во время моего запуска jboss Я вижу, что java использует исправить хранилище доверия и найти запись с псевдонимом backblaze:

2020-04-25 10:46:52,483 INFO  [stdout] (default task-2) trustStore is: C:\Program Files\Java\jdk1.8.0_77\jre\lib\security\cacerts
2020-04-25 10:46:52,483 INFO  [stdout] (default task-2) trustStore type is : jks
2020-04-25 10:46:52,483 INFO  [stdout] (default task-2) trustStore provider is : 
2020-04-25 10:46:52,484 INFO  [stdout] (default task-2) init truststore
...
2020-04-25 10:46:52,564 INFO  [stdout] (default task-2) adding as trusted cert:
2020-04-25 10:46:52,739 INFO  [stdout] (default task-2)   Subject: CN=backblaze.com, O="Backblaze, Inc.", L=San Mateo, ST=California, C=US, SERIALNUMBER=4337553, OID.1.3.6.1.4.1.311.60.2.1.2=Delaware, OID.1.3.6.1.4.1.311.60.2.1.3=US, OID.2.5.4.15=Private Organization
2020-04-25 10:46:52,739 INFO  [stdout] (default task-2)   Issuer:  CN=DigiCert SHA2 Extended Validation Server CA, OU=www.digicert.com, O=DigiCert Inc, C=US
...

Так что я думаю, что процесс java может найти правильный сертификат, но когда я могу определить конечную точку api.backblaze, я получаю исключение при рукопожатии :

2020-04-25 11:19:45,443 ERROR [stderr] (default task-10) <B2Exception 904 io_exception: 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 talking to https://api.backblazeb2.com/b2api/v2/b2_authorize_account>

2020-04-25 11:19:45,444 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.webApiHttpClient.B2WebApiHttpClientImpl.translateToB2Exception(B2WebApiHttpClientImpl.java:256)

2020-04-25 11:19:45,445 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.webApiHttpClient.B2WebApiHttpClientImpl.postAndReturnString(B2WebApiHttpClientImpl.java:223)

2020-04-25 11:19:45,445 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.webApiHttpClient.B2WebApiHttpClientImpl.postJsonAndReturnString(B2WebApiHttpClientImpl.java:185)

2020-04-25 11:19:45,445 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.webApiHttpClient.B2WebApiHttpClientImpl.postJsonReturnJson(B2WebApiHttpClientImpl.java:71)

2020-04-25 11:19:45,445 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2StorageClientWebifierImpl.authorizeAccount(B2StorageClientWebifierImpl.java:141)

2020-04-25 11:19:45,445 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2AccountAuthorizerSimpleImpl.authorize(B2AccountAuthorizerSimpleImpl.java:38)

2020-04-25 11:19:45,446 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2AccountAuthorizationCache.get(B2AccountAuthorizationCache.java:50)

2020-04-25 11:19:45,446 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2UploadUrlCache.get(B2UploadUrlCache.java:87)

2020-04-25 11:19:45,446 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2StorageClientImpl.lambda$uploadSmallFile$4(B2StorageClientImpl.java:207)

2020-04-25 11:19:45,446 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2Retryer.doRetry(B2Retryer.java:85)

2020-04-25 11:19:45,446 ERROR [stderr] (default task-10)    at com.backblaze.b2.client.B2StorageClientImpl.uploadSmallFile(B2StorageClientImpl.java:204)

Я новичок в SSL и не понимаю, что я делаю неправильно. Либо я скачал неправильный сертификат (а api.backblaze получил дополнительный сертификат, который я должен установить), либо я неправильно настроил java хранилище доверия.

1 Ответ

0 голосов
/ 25 апреля 2020

Хорошо, после некоторой борьбы вокруг я обнаружил, что использовал неправильный сертификат. Мне пришлось скачать сертификат с api.backblazeb2.com и установить его:

Загрузить:

keytool -printcert -sslserver api.backblazeb2.com:443 -rfc > api.backblazeb2.cer

Установить:

keytool -import -alias api.backblazeb2 -keystore "%JAVA_HOME%/jre/lib/security/cacerts" -storepass changeit -keypass changeit -file api.backblazeb2.cer -nopro
mpt

Чтобы быть уверенным, перезагрузите ваш java процесс после этого.

...