PKCS # 12 - это формат файла (часто называемый .p12 или .pfx), в котором вы можете хранить закрытый ключ и сертификаты. Используется в основном для конвертации / транспортировки ключей и сертификатов. Если вы экспортируете закрытый ключ + сертификат из браузера, скорее всего, он будет в этом формате.
PKCS # 11 - это интерфейс, обычно используемый для связи с аппаратными криптографическими токенами (часто со смарт-картами или USB-токенами, которые по сути являются смарт-картами, встроенными в считывающее устройство). Этот интерфейс имеет ряд операций для использования ключей и сертификатов. Некоторые токены могут подписывать, используя закрытый ключ, который они содержат, но ключ не может покинуть устройство.
Смысл этого интерфейса состоит в том, чтобы рассматривать то, что обрабатывает ключи и сертификаты, как отдельную сущность, без необходимости выполнять криптографические операции, которые предлагает PKCS # 11 (более конкретно, те, которые связаны с закрытым ключом).
Когда вы используете PKCS # 11 с NSS, вы эффективно используете NSS в качестве черного ящика, заключенного в слой PKCS # 11 (это фактически поставщик программного обеспечения для того, каким будет аппаратный токен PKCS # 11). Существует небольшая разница в том, как Java использует NSS через PKCS # 11, в том, что ей не требуется общая библиотека PKCS # 11 (по сравнению с другими библиотеками PKCS # 11), поэтому, строго говоря, это не PKCS # 11, хотя это очень похоже.
В Java вы можете получить экземпляр RSAPrivateKey
из хранилища PKCS # 11, использовать его для подписи и расшифровки, даже не имея возможности получить что-либо из его модуля. Обрабатывающий его провайдер безопасности будет выполнять подписывание / дешифрование через библиотеку (и, следовательно, через токен, если эта библиотека поддерживается аппаратным токеном).
Возвращаясь к KeyStore
в Java, это API, который позволяет вам загружать и использовать ключи и сертификаты из файлов (вы получаете различные форматы файлов, такие как JKS, PKCS # 12, PEM, в зависимости от вашего поставщика безопасности ) или из других базовых API (таких как PKCS # 11, более или менее слитых с NSS в поставщике Sun, или KeychainStore, если вы используете OSX и хотите использовать KeyChain в качестве хранилища ключей).