Ошибка использования сертификата PFX без пароля в вызове API Android Kotlin VolleyAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Ошибка использования сертификата PFX без пароля в вызове API Android Kotlin Volley

Сообщение Anonymous »


Я столкнулся с проблемой при вызове API в моем приложении Android Kotlin с использованием сертификата PFX без пароля. Ошибка варьируется в зависимости от того, передаю ли я нулевой или пустой пароль ("".toCharArray() или CharArray(0)). Я использую Volley для сетевого запроса.

Private fun apiCall() { пытаться { val URL = "https://api.sample.xyz" вал jsonBody = JSONObject() jsonBody.put("id", "12345678901234567890") val headers = HashMap() headers["user"] = "имя пользователя" headers["пароль"] = "пароль" val запрос = объект: JsonObjectRequest( Method.POST, URL, jsonBody, Response.Listener { ответ -> результат val = response.toString() Log.d("Ответ API", результат) }, Response.ErrorListener { ошибка -> Log.d("Ответ API", error.message.toString()) ошибка выброса } ) { переопределить fun getHeaders(): MutableMap { возвращать заголовки } } // Инициализируем RequestQueue с помощью HurlStack с собственной фабрикой сокетов SSL val requestQueue: RequestQueue = Volley.newRequestQueue( Контекст приложения, HurlStack(null, pfxSsSocketFactory()) ) // Добавляем запрос в RequestQueue. requestQueue.add(запрос) } catch (e: Exception) { е.printStackTrace() // Здесь обрабатываем любые другие исключения } } частное развлечение pfxSsSocketFactory(): SSLSocketFactory { пытаться { val keyStore = KeyStore.getInstance("PKCS12") // Загрузка сертификата PFX val certificateInputStream = resources.openRawResource(R.raw.apiscertificate) вал пароль = ноль keyStore.load(certificateInputStream, пароль) // Проверяем тип записи закрытого ключа val псевдоним = keyStore.aliases().nextElement() val PrivateKey = keyStore.getKey(псевдоним, пароль) if (privateKey — это java.security.interfaces.RSAPrivateKey) { // Ключ RSA, продолжаем настройку SSLContext val keyManagerFactory = KeyManagerFactory.getInstance("X509") keyManagerFactory.init(хранилище ключей, пароль) // Создаем SSLContext, который использует KeyManager val sslContext = SSLContext.getInstance("TLS") sslContext.init(keyManagerFactory.keyManagers, ноль, ноль) вернуть sslContext.socketFactory } еще { throw RuntimeException("Неподдерживаемый тип закрытого ключа") } } catch (e: Exception) { throw RuntimeException("Ошибка создания фабрики сокетов SSL", e) } } Что я пробовал: Я пробовал различные подходы для загрузки сертификата PFX, включая передачу значения null, "".toCharArray() и CharArray(0) в качестве пароля. Однако ни один из этих подходов не решил проблему.

При передаче null в качестве пароля я получаю сообщение об ошибке:

Вызвано: java.lang.NullPointerException: пароль не указан, когда он ожидался При передаче «».toCharArray() или CharArray(0) в качестве пароля я получаю сообщение об ошибке:

Вызвано: java.io.IOException: хранилище ключей PKCS12 для Mac недействительно — неправильный пароль или поврежденный файл. Я ищу альтернативные подходы или предложения для успешного выполнения вызова API с использованием сертификата PFX без пароля и без возникновения упомянутых ошибок. Если существуют какие-либо другие методы или рекомендации по обработке сертификатов без пароля в Android Kotlin с использованием Volley или других библиотек, предоставьте информацию или примеры. Я ценю любые советы и рекомендации по эффективному решению этой проблемы.
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»