Ответ 1
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 в качестве хранилища ключей).