пока работает нормально когда пользуюсь

аюсь сделать несколько хранилищ ключей, используяkeytool из последней JRE (версия 1.8.0_151). Когда я создаю хранилище ключей с помощью этой командыkeytool -genkey -alias serverprivate -keystore server.private -keyalg rsa -storepass apassword -keypass apassword это показывает мне это предупреждение:

Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate 
to  PKCS12 which is an industry standard format using "keytool 
-importkeystore -srckeystore server.private -destkeystore server.private
-deststoretype pkcs12".

Поэтому я набираю команду, и она говорит, что это сделано, и старое хранилище ключей было сохранено в server.private_old. Но когда я бегуkeytool -list -keystore server.private и введите пароль, он все еще указан как JKS вместо PKCS12. Почему это?

Обновить
Он также не поменяется на pkcs12, потому что когда я используюKeyStore store = KeyStore.getInstance("pkcs12"); в Java выдает ошибку, в то время как он работает нормально при использованииgetInstance("JKS");

обновление 2
И при использованииkeytool -genkey -alias serverprivate -keystore server.private -storetype PKCS12 -keyalg rsa это не показывает мне предупреждение, но все еще показывает как хранилище ключей JKS при использованииkeytool -list server.private.

 Maarten Bodewes04 дек. 2017 г., 18:40
Не могли бы вы попытаться сохранить файл под другим именем и посмотреть, что произойдет? Если вы в системе Unix, не могли бы вы также попробоватьfile <keystore_name.ext> также? Хм, это последнее предложение устарело, прежде чем я смог напечатать его с обновлением :)
 James K Polk04 дек. 2017 г., 19:27
Новое хранилище ключей действительно PKCS12. Баг в том, что keytoolговорит это Джекс. Чтобы убедиться в этом, вы можете проанализировать его с помощью openssl:openssl pkcs12 -in server.private
 Maarten Bodewes04 дек. 2017 г., 18:43
Я настоятельно рекомендую использовать.jks а также.p12 расширения имени файла, кстати.
 Maarten Bodewes04 дек. 2017 г., 18:50
ОК, это начинает выглядеть как ошибка. Обратите внимание, что в Java 9 по умолчанию используется .p12, поэтому может возникнуть проблема с обратным портированием. Но не могли бы вы переместить-deststoretype аргументы для начала команды, просто чтобы быть уверенным? Какое содержимое находится в хранилище ключей, что-нибудь, что может не поддерживать Java 8, например, закрытые ключи без сертификатов?
 Conner Dassen04 дек. 2017 г., 18:43
@MaartenBodewes все еще указан как JKS, также при изменении расширения на p12

Ответы на вопрос(1)

это ошибка в том, что показывает keytool, а не в том, что он делает. Рассмотрим следующие эксперименты.

(РЕДАКТИРОВАТЬ:отчет об ошибке подан)

Во-первых, моя версия JDK 1.8.0_152:

excalibur:~ ronan$ java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

Теперь создайте хранилище ключей, как вы указали:

excalibur:~ ronan$ keytool -genkey -alias serverprivate -keystore server.private -keyalg rsa -storepass apassword -keypass apassword
What is your first and last name?
  [Unknown]:  Art Vandelay
What is the name of your organizational unit?
  [Unknown]:  Export/Import
What is the name of your organization?
  [Unknown]:  Vandelay Industries
What is the name of your City or Locality?
  [Unknown]:  New York
What is the name of your State or Province?
  [Unknown]:  New York
What is the two-letter country code for this unit?
  [Unknown]:  US
Is CN=Art Vandelay, OU=Export/Import, O=Vandelay Industries, L=New York, ST=New York, C=US correct?
  [no]:  yes


Warning:
The JKS keystore uses a proprietary format. It is recommended to migrate to PKCS12 which is an industry standard format using "keytool -importkeystore -srckeystore server.private -destkeystore server.private -deststoretype pkcs12".

Теперь, следуя приведенным инструкциям:

excalibur:~ ronan$ keytool -importkeystore -srckeystore server.private -destkeystore server.private -deststoretype pkcs12
Enter source keystore password:  
Entry for alias serverprivate successfully imported.
Import command completed:  1 entries successfully imported, 0 entries failed or cancelled

Warning:
Migrated "server.private" to Non JKS/JCEKS. The JKS keystore is backed up as "server.private.old".

Но когда мы перечисляем это с помощью keytool, оно все равно говорит JKS.

excalibur:~ ronan$ keytool -list -keystore server.private
Enter keystore password:  
Keystore type: JKS
Keystore provider: SUN

Your keystore contains 1 entry

serverprivate, Dec 4, 2017, PrivateKeyEntry, 
Certificate fingerprint (SHA1): 16:E8:C6:12:7A:F1:7A:B8:64:98:EC:12:C4:07:9E:67:06:BD:DD:BD

Тем не менее, openssl может разобрать его как pkcs12 просто отлично.

excalibur:~ ronan$ openssl pkcs12 -in server.private
Enter Import Password:
MAC verified OK
Bag Attributes
    friendlyName: serverprivate
    localKeyID: 54 69 6D 65 20 31 35 31 32 34 31 33 32 30 38 31 38 32 
Key Attributes: <No Attributes>
Enter PEM pass phrase:
Bag Attributes
    friendlyName: serverprivate
    localKeyID: 54 69 6D 65 20 31 35 31 32 34 31 33 32 30 38 31 38 32 
subject=/C=US/ST=New York/L=New York/O=Vandelay Industries/OU=Export/Import/CN=Art Vandelay
issuer=/C=US/ST=New York/L=New York/O=Vandelay Industries/OU=Export/Import/CN=Art Vandelay
-----BEGIN CERTIFICATE-----
MIIDoTCCAomgAwIBAgIEKSoRITANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMC
VVMxETAPBgNVBAgTCE5ldyBZb3JrMREwDwYDVQQHEwhOZXcgWW9yazEcMBoGA1UE
ChMTVmFuZGVsYXkgSW5kdXN0cmllczEWMBQGA1UECxMNRXhwb3J0L0ltcG9ydDEV
MBMGA1UEAxMMQXJ0IFZhbmRlbGF5MB4XDTE3MTIwNDE4NDM1NVoXDTE4MDMwNDE4
NDM1NVowgYAxCzAJBgNVBAYTAlVTMREwDwYDVQQIEwhOZXcgWW9yazERMA8GA1UE
BxMITmV3IFlvcmsxHDAaBgNVBAoTE1ZhbmRlbGF5IEluZHVzdHJpZXMxFjAUBgNV
BAsTDUV4cG9ydC9JbXBvcnQxFTATBgNVBAMTDEFydCBWYW5kZWxheTCCASIwDQYJ
KoZIhvcNAQEBBQADggEPADCCAQoCggEBAIwVIy24Hws6ffaEQGhYEyaw2JC4UPLH
wtSXpJaZf3lrdtbktbLC+zKJ93fFVfoukX5vpnZKxv+f724duAszkVWN3bBrnAwb
6sh445tXiRhT2eS+z0rHtXwiPWUKOAPOxGUP1Lhfl5ZCPR4bmohyh/daSX1ppT3P
k6//lf1y2RdsS5hZ5Ltx9dr99/txsv4a1D8uuPDHIf8dvWfOqGb7ywIAlrbh5JsA
4IWjMVFMpDQ2WM/C+v48y2W7AdgxGD0J/nNC6t4QfAgwhvVyXbiu9IbAR+ivn59E
VqC83qv4bBkffB3yYk6WSHSl7YloJueWalVAoudf4uHeaNZBLCvbNsMCAwEAAaMh
MB8wHQYDVR0OBBYEFNOc6gJkUFCSgyHCDFGJmZwtPLgIMA0GCSqGSIb3DQEBCwUA
A4IBAQAVyc6j9U+va5U02MxsjDE6LWDPg+0FaqpTAQlU6xhVrZlKWuX+Dup4PF6S
s4oqhInb7XcGOjbLkVTnuEY5mwfHnyGqNhmyyUwJOVrWZJWBZADvhdcZi0w/jclg
jAb7dP1VssR4Ozgsd1XkGxnS7P8e344xpjQd1krPc1Od7qhFSF6FufTDvgEcrmx/
qrHpLpwoYPTyuv+NtD+7KlWINqWq5PT1olydd6ki8O+bTsgDuy8rnvqd/jJ7dsuv
VLNc+IDEEMO26hS8d1WkppTTuLrayE07LCV8df68WHv6KumDSc5Mb0zOUdLqZUDQ
Wmxbt0kEAAG6jgbpACBpGEqtAtTs
-----END CERTIFICATE-----

и следующий фрагмент Java также может его проанализировать.

import java.io.FileInputStream;
import java.security.KeyStore;
import java.util.Collections;

public class Main {
    public static void main(String[] args) throws Exception {
        KeyStore pkcs12 = KeyStore.getInstance("PKCS12");
        pkcs12.load(new FileInputStream("../../../server.private"), "apassword".toCharArray());
        for (String alias : Collections.list(pkcs12.aliases())) {
            System.out.println(alias);
        }
    }
}

и вывод

serverprivate

 dave_thompson_08504 дек. 2017 г., 21:56
По умолчанию я получаю тот же (вводящий в заблуждение) результат, но более точные указания типаkeytool если я выключуkeystore.type.compat в JRE / lib / security / java.security. Также очень тонкий отличительный признак даже при включенном compat kludge: если яkeystore -list и нажмите return, когда будет предложено ввести storepass, для JKS список включает в себя отпечатки пальцев сертификатов, но для P12 это не так, потому что JKS хранит сертификаты в чистом виде, но большинство реализаций P12, включая JCE, «шифруют» certbag с помощью легко сломанного RC2- 40 (что глупо, но все это делают).
 Conner Dassen18 янв. 2018 г., 15:27
Недавно я снова взглянул на это, но когда я вызываю pkcs12.load (), он выдает эту ошибку:java.io.IOException: DerInputStream.getLength(): lengthTag=109, too big.пока работает нормально когда пользуюсьKeyStore.getInstance("JKS");
 Maarten Bodewes05 дек. 2017 г., 02:31
Мой первоначальный комментарий под вопросом обозначилfile команда, включенная в большинство систем Posix (linux, apple, cygwin и т. д.), которую вы также можете использовать для проверки типа файла. Приятно знать, поищите отчет об ошибке завтра.

Ваш ответ на вопрос