JSCEP-Неверный третий тип аргумента.Найдено: 'org.spongycastle.pkcs.PKCS10CertificationRequest', обязательно: 'org.bouncycastle.pkcs.PKCS10CertificationRequest' - PullRequest
0 голосов
/ 11 июня 2019

Я реализую Jscep для Android. Первоначально я попробовал Jscep для Java, и он работал нормально. Теперь в Android я использовал SpongyCastle вместо BouncyCastle. Теперь моя проблема в том, что метод регистрации класса Client использует BouncyCastle. И поэтому, когда я пытаюсь передать аргументы, spongycastle и bouncycastle не подходят (очевидно).

Следующее расширяет губчатый замок.

        PKCS10CertificationRequestBuilder crb = generateCSR(keyPair,entity);

Я передаю вышеуказанную переменную 'crb' в качестве третьего аргумента для регистрации метода, как показано ниже.

try {
            response = client.enrol(cert, keyPair.getPrivate(), crb.build(getContentSigner(keyPair)), "MDM-ROOT-CA");
        } 

И я получаю следующую ошибку. "Неверный третий тип аргумента. Найдено: 'org.spongycastle.pkcs.PKCS10CertificationRequest', обязательно: 'org.bouncycastle.pkcs.PKCS10CertificationRequest".

Я пытался расширить Клиент, но он объявлен окончательным.

Мой вопрос: «Должен ли я вернуться к банкам BouncyCastle?». Или же «Как я могу передать эту переменную Spongycastle?»

1 Ответ

0 голосов
/ 11 июня 2019

Мой вопрос: «Должен ли я вернуться к банкам BouncyCastle?». Или «Как я могу передать эту переменную Spongycastle?»

Вероятно, ни один не будет работать на всех платформах Android

Из того, что я видел, Jscep работает с (подлинным) BouncyCastle, а не SpongyCastle.

Если я правильно прочитал эту старую проблему , урезанная версия BouncyCastle в Android до версии 3.0 не обладает функциональностью, которая нужна Jscep.

  • Для Android до версии 3.0 это не практичное решение. Вы не можете просто сказать Java, чтобы они рассматривали эти два типа как эквивалентные. Это сломало бы систему типов времени исполнения JVM / Davlik.

  • В соответствии с этим StackOverflow Q & A , в 3.0 Android изменил имя пакета Java на своем урезанном BouncyCastle. Это означает, что вы должны иметь возможность связывать подлинные JAR-файлы BouncyCastle с Android-приложением 3.0+. Этого должно быть достаточно, чтобы заставить Jscep работать на этой платформе.

    Этот комментарий к проблеме SpongyCastle говорит о том, что хитрость в том, чтобы заставить Android использовать подлинную функциональность BouncyCastle:

    ... вызовите Security.removeProvider(BouncyCastleProvider.PROVIDER_NAME), чтобы удалить встроенный BC до вызова Security.addProvider(new BouncyCastleProvider()).

  • Теоретически, должно быть возможно портировать Jscep для использования SpongyCastle, но нет четких указаний на то, что кто-то преуспел в в этом. (Учитывая предыдущее, потребность в таком порту только уменьшается.)

Кроме того, я не смог найти автономную альтернативу Jscep, которая работала на Android. Тем не менее, я нашел это:

, что может быть полезно.

...