2017-12-04 13 views
2

最新のJRE(バージョン1.8.0_151)のkeytoolを使用してキーストアを作成しようとしています。私は、このコマンド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を実行してパスワードを入力すると、PKCS12ではなくJKSとして表示されます。どうしてこれなの?

更新
私はJavaでKeyStore store = KeyStore.getInstance("pkcs12");を使用する場合getInstance("JKS");

更新2
そしてkeytool -genkey -alias serverprivate -keystore server.private -storetype PKCS12 -keyalg rsaを使用して使用した場合、それは正常に動作している間、それは、エラーがスローされますので、それは静かに、PKCS12のいずれかに変更されていません私には警告は表示されませんが、keytool -list server.privateを使用してもJKSキーストアとして表示されます。

+0

ですが、あなたは別のファイル名に保存しようとすると何が起こるか見てもらえますか?あなたがUnixシステムを使っているなら、 'file 'も試してみることができますか?うーん、その最後の文は、私がアップデートでそれをタイプする前に廃止されました:) –

+0

ところで、私は '.jks'と' .p12'ファイル名の拡張子を使うことを強くお勧めします。 –

+0

@MaartenBodewesはまだJKSとしてリストされています。また、p12に拡張子を変更するときも同様です。 –

答えて

2

keytoolが表示する内容ではなく、表示されるバグのようです。次の実験を考えてみましょう。

(EDIT:bug report filed

まず、私の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

+1

私はJRE/lib/security/java.securityの 'keystore.type.compat'を無効にすると、デフォルト(誤解を招く)の結果を得るが、' keytool'のより正確な型指示を得る。また、私は 'keystore -list'とstorepassのためにプロンプ​​トが表示されたときにヒットした場合、リストには証明書フィンガープリントが含まれていますが、JKSには証明書が格納されています。明確ではありますが、JCEを含むP12のほとんどの実装は、簡単に壊れたRC2-40(これは愚かですが、誰もがそれを行います)でcertbagを暗号化します。 –

+0

質問の下の私の最初のコメントは、ファイルタイプを確認するのにも使えるほとんどのPosixシステム(linux、apple、cygwinなど)に含まれている 'file'コマンドを示しています。明日はバグレポートを探してみてください。 –

+0

私は最近、これをもう一度見ましたが、pkcs12.load()を呼び出すと、次のエラーがスローされます。 'java.io.IOException:DerInputStream.getLength():lengthTag = 109、too big.'私が 'KeyStore.getInstance(" JKS ");'を使うと、 –

関連する問題