Почему мой ключевой идентификатор не совпадает?

Я пытаюсь расшифровать электронное письмо S / MIME (изначально отправленное через Outlook), и для этого я использую bouncycastle API. Однако у меня возникла загвоздка.

У меня есть в хранилище сертификатов Windows сертификат для получателя. Я ранее использовал его для отправки подписанного и зашифрованного электронного письма другой стороне, а они, в свою очередь, использовали его для отправки мне зашифрованного ответа. Затем я экспортировал сертификат (с закрытым ключом) как файл .pfx и загрузил этот файл pfx в хранилище ключей Java. Однако это не работает, и я подозреваю, что это потому, что идентификаторы ключа темы не совпадают.

Вот код, который я использую для получения идентификатора ключа темы из KeyStore:

KeyStore ks = KeyStore.getInstance("PKCS12");
char[]   pw = "password".toCharArray();

ks.load(new FileInputStream("d:\\cert_priv_key.pfx"), pw);

Enumeration en = ks.aliases();

while( en.hasMoreElements() )
{
    String alias = (String)en.nextElement();
    System.out.println(alias);

    if( ks.isKeyEntry(alias) )
    {
        Certificate[]   chain = ks.getCertificateChain(alias);
        X509Certificate cert  = (X509Certificate)chain[0];

        byte[] id = cert.getExtensionValue("2.5.29.14");

        System.out.println("  " + toHex(id));
    }
}

Это распечатывает следующее идентификатор ключа:

04 16 04 14 88 ed bb 7c 64 7b 41 63 48 0a 24 40 2b 3c d0 78 72 3c 30 b3

Однако, когда я проверяю хранилище сертификатов Windows, идентификатор ключа отличается:

88 ed bb 7c 64 7b 41 63 48 0a 24 40 2b 3c d0 78 72 3c 30 b3

KeyStore возвращает дополнительные 4 байта впереди (идентификатор ключа субъекта должен быть 160-битным хешем SHA1 файла ключ и, следовательно, длиной 20 байт, правильно?).

Еще более запутанным является тот факт, что, когда я анализирую электронную почту S / MIME с помощью API bouncycastle и просматриваю получателей ( SMIMEEnveloped.getRecipientInfos (). getRecipients () ), единственный возвращенный получатель (должен быть только один) имеет этот идентификатор ключа субъекта:

04 14 88 ed bb 7c 64 7b 41 63 48 0a 24 40 2b 3c d0 78 72 3c 30 b3

... у него только два дополнительных байта, а не четыре, и я предполагаю, что именно поэтому я невозможно расшифровать электронное письмо с помощью сертификата.

Почему ни один из этих идентификаторов ключа темы не совпадает? Что я делаю не так?

7
задан Mark 29 June 2011 в 15:20
поделиться