2015-01-12 2 views
1

Я хочу сделать приложение Java, которое делает сигнатуры, но столкнулось с проблемой с файлами политики неограниченной силы, обсуждается во многих сообщениях, например. How to avoid installing "Unlimited Strength" JCE policy files when deploying an application?Не хотите использовать файлы политики неограниченной силы

Все работает нормально, когда я переключаю файлы политики, но я бы предпочел избежать этого, и, поскольку я не планирую использовать симметричное шифрование, я предполагал, что это будет возможно. Моя проблема в том, что я получаю исключение размера «Незаконный ключ» уже в методе загрузки KeyStore.

Моих вопросы:

1) Могу ли я сделать что-нибудь о внутреннем шифрования в хранилище, так что основное ограничение размера не требует от пользователей изменять файлы политики?

2) Я понял, что BullcyCastle Lightweight API может быть вариантом. Если да, как мне загрузить хранилище ключей с этим API?

Security.addProvider(new BouncyCastleProvider());   

//Get private key 
KeyStore keyStore = KeyStore.getInstance("PKCS12","BC"); 
String pwd = "password"; 
FileInputStream finJKS = new FileInputStream("C:\\TEMP\\host.p12"); 
keyStore.load(finJKS,pwd.toCharArray()); 

пробег: java.io.IOException: исключение дешифрования данных - java.security.InvalidKeyException: Illegal размер ключа

Запуск JRE в JDK 7u51 на Netbeans 7.4 на Windows.

С наилучшими пожеланиями

ответ

1

Ваш фрагмент кода генерирует InvalidKeyException несмотря на использование BouncyCastle, потому что вы не используете BC Легкий API. Если вы обращаетесь к BC через JCE API, то те же ограничения на криптозащиту применяются, как и к поставщикам Sun/Oracle.

Файлы PKCS # 12 обычно зашифровываются с помощью 3DES (pbeWithSHA1And3-KeyTripleDES-CBC), который не ограничен файлом политики по умолчанию. Однако PKCS # 12 позволяет использовать произвольные алгоритмы шифрования, поэтому кажется, что у вас есть файл p12, который зашифрован другим алгоритмом. Вы можете проверить это с помощью OpenSSL:

openssl pkcs12 -in host.p12 -info -noout 

Алгоритм шифрования должен меняться при преобразовании к хранилищу ключей к JKS или JCEKS (более безопасный) с Keytool:

keytool -importkeystore -srckeystore host.p12 -srcstoretype PKCS12 -deststoretype JCEKS -destkeystore host.jks 

Конечно, вы должны адаптировать свой затем код:

KeyStore keyStore = KeyStore.getInstance("JCEKS"); 

Вы можете даже преобразовать хранилище ключей JCEKS обратно PKCS12 с Keytool. Keytool генерирует файлы PKCS12 с pbeWithSHA1And3-KeyTripleDES-CBC.

+0

Большое спасибо за ценную информацию. Я протестировал свой файл p12 и фактически использовал алгоритм pbeWithSHA1And3-KeyTripleDES-CBC. В любом случае, когда я тестировал без BouncyCastle: KeyStore keyStore = KeyStore.getInstance ("PKCS12"); У меня тогда не возникало проблем с файлами политики. То же самое применяется, когда я преобразовал хранилище ключей в соответствии с вашим примером и использовал экземпляр «JCEKS». –

+0

Ну, это ожидаемое поведение. Кажется, что есть странная проблема с BC и вашим p12-файлом, потому что это не имеет значения, если вы используете BC или нет (я просто попробовал его с одним из моих p12-файлов). – Omikron

Смежные вопросы