2015-05-18 3 views
1

Я пишу сервер CMP, и у меня есть проблема. Он используется в централизованной PKI, где RA отправляет закрытый ключ с соответствующим сертификатом на сервер, который мы должны передать клиенту CMP.Шифрование закрытого ключа в централизованной PKI с bouncycastle

Проблема в том, что я не могу найти, как мы должны шифровать закрытый ключ, чтобы отправить его клиенту и чтобы он мог его расшифровать. Мы полагаемся только на безопасность https, потому что это звучит неправильно? Я пропустил что-то в RFC CRMF?

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

Это легко сделать, когда клиент является тем, кто генерирует свою пару ключей, но в этом конкретном случае все генерируется нашим OpenTrust RA.

+1

Вы действительно уверены, что RA генерирует закрытый ключ? Например, сообщение CRMF, в частности, не имеет полей для хранения закрытого ключа. –

+1

Вам не нужно отправлять закрытый ключ клиенту. Здесь есть что-то серьезное. Либо это ваш личный ключ, который вы должны хранить в привате, либо это закрытый ключ клиента, который * он * должен сохранять конфиденциальным. Если две стороны имеют один и тот же секретный ключ, вся точка PKI уничтожается. – EJP

+0

Способ, которым он работает, заключается в том, что сервер предоставит CN и пароль CMP, который будет проверять на LDAP, что он имеет право запросить регистрацию. Как только это будет сделано, OpenTrust сгенерирует закрытый ключ и сертификат для клиента. Это делается OT, потому что по закону мы должны секвестрировать копию закрытого ключа. –

ответ

3

PKCS # 12 может использоваться для распространения секретных ключей от RA к различным клиентам. Для этой цели мы использовали аппаратный USB-токен. Данные на токене USB могут быть дешифрованы только программным обеспечением на стороне клиента (с использованием предварительно разделяемого секрета). Если вы не хотите использовать аппаратные токены, единственный вариант, который у вас есть, - использовать предварительно разделяемый секрет (переданный через некоторые внеполосные/вне канала) и использовать этот симметричный ключ для распространения частного ключа и передачи это по HTTPS. Также убедитесь, что ваш HTTPS настроен на использование как минимум AES-256.