美文网首页程序员
keytool 工具应用分析与整理

keytool 工具应用分析与整理

作者: 58bc06151329 | 来源:发表于2017-06-26 13:54 被阅读232次

    文前说明

    作为码农中的一员,需要不断的学习,我工作之余将一些分析总结和学习笔记写成博客与大家一起交流,也希望采用这种方式记录自己的学习之旅。

    本文仅供学习交流使用,侵权必删。
    不用于商业目的,转载请注明出处。

    Keytool 是一个 Java 数据证书的管理工具。

    Key and Certificate Management Tool
    
    Commands:
    
     -certreq            Generates a certificate request
     -changealias        Changes an entry's alias
     -delete             Deletes an entry
     -exportcert         Exports certificate
     -genkeypair         Generates a key pair
     -genseckey          Generates a secret key
     -gencert            Generates certificate from a certificate request
     -importcert         Imports a certificate or a certificate chain
     -importkeystore     Imports one or all entries from another keystore
     -keypasswd          Changes the key password of an entry
     -list               Lists entries in a keystore
     -printcert          Prints the content of a certificate
     -printcertreq       Prints the content of a certificate request
     -printcrl           Prints the content of a CRL file
     -storepasswd        Changes the store password of a keystore
    

    证书的生成

    • 创建证书命令
    keytool -genkey -alias server -keyalg RSA -keystore server.keystore
    
    • 命令交互
    Enter keystore password:  
    Re-enter new password: 
    What is your first and last name?
      [Unknown]:  desktop
    What is the name of your organizational unit?
      [Unknown]:  cetc
    What is the name of your organization?
      [Unknown]:  cetc
    What is the name of your City or Locality?
      [Unknown]:  chengdu
    What is the name of your State or Province?
      [Unknown]:  sichuan
    What is the two-letter country code for this unit?
      [Unknown]:  cn
    Is CN=cetc, OU=cetc, O=cetc, L=chengdu, ST=sichuan, C=cn correct?
      [no]:  y
    
    Enter key password for <server>
        (RETURN if same as keystore password):  
    Re-enter new password:
    
    命令参数 参数说明 默认值
    -alias 别名(密钥库中密钥唯一)
    -keystore 指定密钥库的名称
    -storepass 指定密钥库的密码
    -keypass 指定别名密钥的密码
    -dname 指定证书拥有者信息
    -keyalg 指定密钥的算法(RSADSA DSA
    -validity 指定创建的证书有效期多少天) 90
    -keysize 指定密钥长度 1024
    dname 参数 参数说明
    CN 名字与姓氏
    OU 组织单位名称
    O 组织名称
    L 城市或区域名称
    ST 州或省份名称
    C 单位的两字母国家代码

    证书的查看

    keytool -list  -v -keystore server.keystore -storepass 123456
    
    命令参数 参数说明
    -list 显示密钥库中的证书信息
    -v 显示密钥库中的证书详细信息
    Keystore type: JKS
    Keystore provider: SUN
    
    Your keystore contains 1 entry
    
    Alias name: cetc
    Creation date: Jun 26, 2017
    Entry type: PrivateKeyEntry
    Certificate chain length: 1
    Certificate[1]:
    Owner: CN=desktop, OU=cetc, O=cetc, L=chengdu, ST=sichuan, C=cn
    Issuer: CN=desktop, OU=cetc, O=cetc, L=chengdu, ST=sichuan, C=cn
    Serial number: 534209f8
    Valid from: Mon Jun 26 09:55:20 CST 2017 until: Thu Jun 24 09:55:20 CST 2027
    Certificate fingerprints:
         MD5:  AF:42:BB:B9:1E:E7:65:11:13:B4:36:FC:68:1D:5B:F4
         SHA1: FE:6F:92:BA:73:D4:D0:F2:76:7B:6D:C7:5B:BF:26:4E:F6:8D:61:D2
         SHA256: 0B:6E:CA:D5:11:4A:93:D3:E0:28:AC:54:D6:FD:28:E8:56:F6:D8:58:4A:3C:A3:44:FB:71:7C:2C:AE:20:02:DD
         Signature algorithm name: SHA256withRSA
         Version: 3
    
    Extensions: 
    
    #1: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: E3 61 A9 A9 34 9E 68 85   D2 A2 D0 A8 9A 0F EA B1  .a..4.h.........
    0010: D6 BB 45 29                                        ..E)
    ]
    ]
    

    缺省情况下,-list 命令打印证书的 MD5 指纹。而如果指定了 -v 选项,将以可读格式打印证书,如果指定了 -rfc 选项,将以可打印的编码格式输出证书。

    Keystore type: JKS
    Keystore provider: SUN
    
    Your keystore contains 1 entry
    
    Alias name: cetc
    Creation date: Jun 26, 2017
    Entry type: PrivateKeyEntry
    Certificate chain length: 1
    Certificate[1]:
    -----BEGIN CERTIFICATE-----
    MIICXDCCAcWgAwIBAgIEU0IJ+DANBgkqhkiG9w0BAQsFADBhMQswCQYDVQQGEwJjbjEQMA4GA1UE
    CBMHc2ljaHVhbjEQMA4GA1UEBxMHY2hlbmdkdTENMAsGA1UEChMEY2V0YzENMAsGA1UECxMEY2V0
    YzEQMA4GA1UEAxMHZGVza3RvcDAeFw0xNzA2MjYwMTU1MjBaFw0yNzA2MjQwMTU1MjBaMGExCzAJ
    BgNVBAYTAmNuMRAwDgYDVQQIEwdzaWNodWFuMRAwDgYDVQQHEwdjaGVuZ2R1MQ0wCwYDVQQKEwRj
    ZXRjMQ0wCwYDVQQLEwRjZXRjMRAwDgYDVQQDEwdkZXNrdG9wMIGfMA0GCSqGSIb3DQEBAQUAA4GN
    ADCBiQKBgQCo+0v6DS6Dh7f+PTio3bXC8wVUaOHQfbAYzFpy5wfG/i+BcV/n2nOW6jXcwt5GXiFT
    YpizxoERNzxOs4XRnwxqYv22Qv0LH5Q38gnr0XLr8VYE/7ZLnbSdSqi0p3Af0FwOQIwzW/8+Dpn/
    zJigy5dK49rxTe5angDYlRXtB9sNYwIDAQABoyEwHzAdBgNVHQ4EFgQU42GpqTSeaIXSotComg/q
    sda7RSkwDQYJKoZIhvcNAQELBQADgYEAKvI9C3kmEcjUark3j55Hsj+ur2jzVy7MWCOASGsWjLA0
    qDqgdmVGYhPuHSEuAT0yQqtg9uodsPER+oDTeePKRjAOXg2MzeqcmvwInhpRkhfljLJeVGy5TXRU
    s8ZjnDP9F/JdDfqcNEzaAWuRllXf9yPfK9xUs5TwM1TCEP1lSQs=
    -----END CERTIFICATE-----
    

    证书条目的导出

    keytool -export -alias cetc -keystore server.keystore -file server.cer -rfc -storepass 123456
    
    命令参数 参数说明
    -export 将别名指定的证书条目导出到文件
    -file 参数指定导出到文件的文件名
    -rfc 表示以 base64 输出文件,否则以二进制输出。

    server.keysstore 也可以为 .jks 格式,server.cer 也可以为 .crt 格式。

    查看导出的证书条目

    keytool -printcert -file server.cer
    
    命令参数 参数说明
    -printcert 查看导出的证书条目信息
    Owner: CN=desktop, OU=cetc, O=cetc, L=chengdu, ST=sichuan, C=cn
    Issuer: CN=desktop, OU=cetc, O=cetc, L=chengdu, ST=sichuan, C=cn
    Serial number: 534209f8
    Valid from: Mon Jun 26 09:55:20 CST 2017 until: Thu Jun 24 09:55:20 CST 2027
    Certificate fingerprints:
         MD5:  AF:42:BB:B9:1E:E7:65:11:13:B4:36:FC:68:1D:5B:F4
         SHA1: FE:6F:92:BA:73:D4:D0:F2:76:7B:6D:C7:5B:BF:26:4E:F6:8D:61:D2
         SHA256: 0B:6E:CA:D5:11:4A:93:D3:E0:28:AC:54:D6:FD:28:E8:56:F6:D8:58:4A:3C:A3:44:FB:71:7C:2C:AE:20:02:DD
         Signature algorithm name: SHA256withRSA
         Version: 3
    
    Extensions: 
    
    #1: ObjectId: 2.5.29.14 Criticality=false
    SubjectKeyIdentifier [
    KeyIdentifier [
    0000: E3 61 A9 A9 34 9E 68 85   D2 A2 D0 A8 9A 0F EA B1  .a..4.h.........
    0010: D6 BB 45 29                                        ..E)
    ]
    ]
    

    PKCS12 与 JKS 格式转换

    keytool -v -importkeystore -srckeystore server.keystore -srcalias cetc -destkeystore server.p12 -deststoretype PKCS12
    
    命令参数 参数说明
    -importkeystore 导入密钥库,通过格式设定,我们可以将 JKS 文件转换为 PKCS12 格式。
    -v 显示详情
    -srckeystore 源密钥库
    -srcstoretype 源密钥库格式
    -srcstorepass 源密钥库密码
    -destkeystore 目标密钥库
    -deststoretype 目标密钥库格式,这里为 PKCS12,默认值 JKS
    -deststorepass 目标密钥库密码。

    PKCS 文件与 PEM 文件转换

    • 安装 openssl
    yum -y install openssl openssl-devel
    
    • 通过 opensslpkcs 文件转换成 pem 文件
    openssl pkcs12 -in server.p12 -out server.pem
    
    • 通过 opensslpem 文件转换成 pkcs 文件
    openssl pkcs12 -export -in server.pem -out server.p12
    

    证书条目的删除

    keytool -delete -alias cetc -keystore server.keystore -storepass 123456
    
    命令参数 参数说明
    -delete 删除密钥库中某证书条目

    证书条目口令的修改

    keytool -keypasswd -alias cetc -keypass 123456 -new 654321 -keystore server.keystore -storepass 123456
    
    命令参数 参数说明
    -keypasswd 修改密钥库中指定条目口令
    -storepasswd 修改密钥库口令
    -new 修改后新密码

    修改证书条目信息

    keytool -selfcert -alias cetc -keypass 123456 -keystore server.keystore -storepass 123456 -dname "cn=desktop,ou=cetc,o=cetc,c=cetc"
    
    命令参数 参数说明
    -selfcert 某证书条目信息修改

    证书的导入

    keytool -export -alias cetc -keystore server.keystore -file server.cer -storepass 123456
    
    命令参数 参数说明
    -import 将已签名数字证书条目导入密钥库

    密钥库文件格式

    格式 扩展名 描述 特点
    JKS .jks/.ks Java Keystore,密钥库的 Java 实现版本,providerSUN 密钥库和私钥用不同的密码进行保护。
    JCEKS .jce JCE Keystore,密钥库的 JCE 实现版本,providerSUN JCE 相对于 JKS 安全级别更高,保护密钥库私钥时采用 TripleDES
    PKCS12 .p12/.pfx PKCS #12,个人信息交换语法标准。 包含私钥、公钥及其证书、密钥库和私钥用相同密码进行保护。
    BKS .bks Bouncycastle Keystore,密钥库的 BC 实现版本,providerBC 基于 JCE 实现。
    UBER .ubr Bouncycastle UBER Keystore,密钥库的 BC 更安全实现版本,providerBC

    证书文件格式

    格式 扩展名 描述 特点
    DER .cer/.crt/.rsa ASN .1 DER,用于存放证书 不含私钥、二进制
    PKCS7 .p7b/.p7r PKCS #7,加密信息语法标准 1.p7b 以树状展示证书链,不含私钥;2.p7rCA 对证书请求签名的回复,只能用于导入。
    CMS .p7c/.p7m/.p7s Cryptographic Message Syntax,1.p7c 只保存证书;2.p7msignature with enveloped data;3.p7s,时间戳签名文件。
    PEM .pem Printable Encoded Message,1.该编码格式在 RFC1421 中定义,其实 PEMPrivacy-Enhanced Mail 的简写,但他也同样广泛运用于密钥管理;2. ASCII 文件;3.一般基于 base 64 编码
    PKCS10 .p10/.csr PKCS #10,公钥加密标准 Certificate Signing Request 1.证书签名请求文件;2. ASCII 文件;3. CA 签名后以 p7r 文件回复。
    SPC .pvk/.spc Software Publishing Certificate,微软公司特有的双证书文件格式,经常用于代码签名,其中 1. pvk 用于保存私钥;2. spc 用于保存公钥。

    相关文章

      网友评论

        本文标题:keytool 工具应用分析与整理

        本文链接:https://www.haomeiwen.com/subject/xkxjcxtx.html