Вопрос

Я пытаюсь написать апплет, который будет подписывать электронную почту с помощью S/MIME.

Очевидно, я хочу сделать одну маленькую банку, в которой будет только все необходимое.Очевидно, что Java-способ сделать это предполагает наличие огромной священной банки JCE Bouncy Castle с подписью.

Вопрос в том:Какой самый простой способ получить S/MIME, не касаясь JCE и не заставляя его жаловаться на «аутентификацию» «поставщиков»?Может быть, существует реализация S/MIME, которая не зависит от JCE?Может быть, можно использовать Bouncy Castle S/MIME, используя их легкий API, не затрагивая JCE?Может быть, есть какой-нибудь другой способ?

Для меня очевидно, что ничто не может помешать работе криптоалгоритмов с открытым исходным кодом на чистой Java независимо от того, одобрит ли Sun, поэтому это скорее не вопрос теоретической возможности:какой способ наименее болезненный?

Конечно, я всегда могу пойти на провал раньше, взяв реализацию JCE на чистой Java Bouncy Castle, переименовав ее пакеты в java.security1 и внеся любые изменения, которые захочу, но сейчас этот путь выглядит слишком болезненным.

ОБНОВЛЯТЬ Моя текущая проблема с прямым использованием Bouncy Castle:Я пытаюсь загрузить ключи из хранилища ключей, что предполагает использование SecretKeyFactory, которая, в свою очередь, отклоняет мою сборку надувного замка.

Это было полезно?

Решение 2

Подписывать сообщения без использования JCE довольно просто.Настоящей проблемой было чтение ключей PKCS#12.

Я сделал это:* Скопирован класс JDKPKCS12KeyStore.* Везде в нем заменен Security.getInstance () на bcprovider.getService (). NewInstance () (который возвращает SPI-S) * в тех Spi-S (в источниках BC), которые сделали необходимые методы публичными, а не защищены.

Это похоже на хак, но, похоже, действительно работает.

Другие советы

BC S/MIME написан поверх пакета CMS, поэтому вопрос на самом деле сводится к модификации пакета CMS, чтобы все шифрование выполнялось с использованием облегченных классов.

Нечто подобное уже было сделано, более или менее успешно, для .NET-версии Bouncy Castle.Мы пытаемся (по общему признанию, это медленный процесс) провести рефакторинг версии Java, чтобы элементы CMS могли работать как с JCE, так и с упрощенной версией.Та же проблема затрагивает и другие части API BC, например.хранилище ключей PKCS#12 встроено в провайдер JCE, пакет OpenPGP записан в JCE и т. д.Их порты .NET также переписали их на облегченный API.

Однако ваша проблема, вероятно, проще, чем общий случай.Предположительно, вам нужен только CMSSignedDataGenerator и вспомогательные классы.Вероятно, вам не нужны все бесчисленные варианты addSigner илиgenerate.Если вы заранее определитесь с алгоритмами дайджеста/подписи, то все материалы провайдера будет легко заменить жестко закодированными вызовами конкретных облегченных реализаций.

Вместо хранилища ключей, возможно, вам удастся просто сохранить один закрытый ключ в файле PKCS # 8 (возможно, в кодировке PEM).Аналогично с сертификатом.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top