zoukankan      html  css  js  c++  java
  • Java keytool命令说明

    Java keytool命令说明

    Java 中的 keytool.exe (位于 JDKBin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。

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

    keystore
    Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中在keystore里,包含两种数据:
    密钥实体(Key entity)——密钥(secret key)又或者是私钥和配对公钥(采用非对称加密)
    可信任的证书实体(trusted certificate entries)——只包含公钥

    Alias(别名)
    每个keystore都关联这一个独一无二的alias,这个alias通常不区分大小写

    keystore的存储位置
    在没有制定生成位置的情况下,keystore会存在与用户的系统默认目录,
    如:对于window xp系统,会生成在系统的C:Documents and SettingsUserName
    文件名为“.keystore”

    keystore的生成

    引用keytool -genkey -alias tomcat -keyalg RSA   -keystore d:mykeystore -dname "CN=localhost, OU=localhost, O=localhost, L=SH, ST=SH, C=CN" -keypass changeit -storepass -validity 180

    参数说明:
    -genkey表示要创建一个新的密钥
    -dname表示密钥的Distinguished Names,
    CN=commonName
    OU=organizationUnit
    O=organizationName
    L=localityName
    S=stateName
    C=country
    Distinguished Names表明了密钥的发行者身份
    -keyalg使用加密的算法,这里是RSA
    -alias密钥的别名
    -keypass私有密钥的密码,这里设置为changeit
    -keystore 密钥保存在D:盘目录下的mykeystore文件中
    -storepass 存取密码,这里设置为changeit,这个密码提供系统从mykeystore文件中将信息取出
    -validity该密钥的有效期为 180天 (默认为90天)


    1,产生一个密钥对
            keytool -genkey -alias mykeypair -keypass mykeypairpwd
        过程如下:
            liqingfeng@liqingfeng:~/WORK_APP/keytooltest$ keytool -genkey -alias mykeypair -keypass mykeypairpwd
            输入keystore密码: 123456
            您的名字与姓氏是什么?
            [Unknown]: fingki
            您的组织单位名称是什么?
            [Unknown]: server
            您的组织名称是什么?
            [Unknown]: server
            您所在的城市或区域名称是什么?
            [Unknown]: bj
            您所在的州或省份名称是什么?
            [Unknown]: bj
            该单位的两字母国家代码是什么
            [Unknown]: CN
            CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN 正确吗?
            [否]: y

            liqingfeng@liqingfeng:~/WORK_APP/keytooltest$
        这样将产生一个keypair,同时产生一个keystore.默认名是.keystore,存放到user-home目录
        假如你想修改密码,可以用:keytool -keypasswd -alias mykeypair -keypass mykeypairpwd -new newpass

    2,产生一个密钥对,存放在指定的keystore中(加上-keystore 参数)
        keytool -genkey -alias mykeypair -keypass mykeypairpwd -keystore mykeystore
        过程与上面的相同。
        执行完后,在当前目录下产生一个名为mykeystore的keystore,里面有一个别名为mykeypair的keypair。

    3,检查一个keystore中的内容
            keytool -list -v -alias mykeypair -keystore mykeystore
            参数    -v指明要列出详细信息
                    -alias指明列出指定的别名为mykeypair的keypair信息(不指定则列出所有)
                    -keystore指明要列出名字为mykeystore的keystore中的信息
        过程如下:
            liqingfeng@liqingfeng:~/WORK_APP/keytooltest$ keytool -list -v -keystore mykeystore
            输入keystore密码: 123456

            Keystore 类型: jks
            Keystore 提供者: SUN

            您的 keystore 包含 1 输入

            别名名称: mykeypair
            创建日期: 2008-4-16
            输入类型:KeyEntry
            认证链长度: 1
            认证 [1]:
            Owner: CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN
            发照者: CN=fingki, OU=server, O=server, L=bj, ST=bj, C=CN
            序号: 48058c3c
            有效期间: Wed Apr 16 13:18:52 GMT+08:00 2008 至: Tue Jul 15 13:18:52 GMT+08:00 2008
            认证指纹:
                MD5: FD:C3:97:DC:84:A0:D8:B2:08:6F:26:7F:31:33:C3:05
                SHA1: A3:21:6F:C6:FB:5F:F5:2D:03:DA:71:8C:D3:67:9D:1C:E1:27:A5:11


            *******************************************
            *******************************************


            liqingfeng@liqingfeng:~/WORK_APP/keytooltest$   
    4,Keystore的产生:
        当使用-genkey 或-import或-identitydb命令添加数据到一个keystore,而当这个keystore不存在时,产生一个keystore.默认名是.keystore,存放到user-home目录.
        当用-keystore指定时,将产生指定的keystore.
    5,Keystore的实现:
        Keytool 类位于java.security包下,提供一个非常好的接口去取得和修改一个keystore中的信息. 目前有两个命令行:keytool和jarsinger,一个GUI工具Policy 可以实现keystore.由于keystore是公开的,用户可以用它写一些额外的安全应用程序.
        Keystore还有一个sun公司提供的內在实现.它把keystore作为一个文件来实现.利用了一个keystore类型(格式)"JKS".它用单独的密码保护每一个私有钥匙.也用可能不同的密码保护整个keystore的完整性.
        支持的算法和钥匙大小:
        keytool允许用户指定钥匙对和注册密码服务供应者所提供的签名算法.缺省的钥匙对产生算法是"DSA".假如私有钥匙是"DSA"类型,缺省签名算法是"SHA1withDSA",假如私有钥匙是"RSA"类型,缺省算法是"MD5withRSA".
        当产生一个DSA钥匙对,钥匙必须在512-1024位之间.对任何算法的缺省钥匙大小是1024位.
    6,关于证书
        一个证书是一个实体的数字签名,还包含这个实体的公共钥匙值.
            公共钥匙 :是一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道.公共钥匙用来检验签名;
            数字签名:是实体信息用实体的私有钥匙签名(加密)后的数据.这条数据可以用这个实体的公共钥匙来检验签名(解密)出实体信息以鉴别实体的身份;      
            签名:用实体私有钥匙加密某些消息,从而得到加密数据;
            私有钥匙:是一些数字,私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.公共钥匙用来加密数据,私有钥匙用来计算签名.公钥加密的消息只能用私钥解密,私钥签名的消息只能用公钥检验签名。
            实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西.
        实际上,我们用[1]中的命令已经生成了一个自签名的证书,没有指定的参数都使用的是默认值。
        我们也可以用如下命令生成一个自签名的证书:
            keytool -genkey -dname "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN" -alias myCA -keyalg RSA -keysize 1024 -keystore myCALib -keypass 654321 -storepass 123456 -validity 3650
            这条命令将生成一个别名为myCA的自签名证书,证书的keypair的密码为654321,证书中实体信息为 "CN=fingki,OU=server,O=server,L=bj,ST=bj,C=CN",存储在名为myCALib的keystore中(如果没有将自动生成一个),这个keystore的密码为123456,密钥对产生的算法指定为RSA,有效期为10年。
    7,将证书导出到证书文件
        keytool -export -alias myCA -file myCA.cer -keystore myCALib -storepass 123456 -rfc
        使用该命令从名为myCALib的keystore中,把别名为myCA的证书导出到证书文件myCA.cer中。(其中-storepass指定keystore的密码,-rfc指定以可查看编码的方式输出,可省略)。

    8,通过证书文件查看证书信息
        keytool -printcert -file myCA.cer
    9,密钥库中证书条目口令的修改
        Keytool -keypasswd -alias myCA -keypass 654321 -new newpass -storepass 123456 -keystore myCALib
    10,删除密钥库中的证书条目
        keytool -delete -alias myCA -keystore myCALib
    11,把一个证书文件导入到指定的密钥库
        keytool -import -alias myCA -file myCA.cer -keystore truststore
        (如果没有名为truststore的keystore,将自动创建,将会提示输入keystore的密码)
    12,更改密钥库的密码
        keytool -storepasswd -new 123456 -storepass 789012 -keystore truststore
        其中-storepass指定原密码,-new指定新密码。

    将[keystore]导入java信任证书库

    keytool -import -trustcacerts -alias tomcat_pso -file [keystore] -keypass changeit -keystore "%JAVA_HOME%/jre/lib/security/cacerts"

    注:%JAVA_HOME%/jre/lib/security/cacerts为java自带的证书库,默认密码为changeit

    keytool -list -v -keystore c:/jdk15/jre/lib/security/cacerts (列出信任库中已经存在的证书)
    keytool -delete -trustcacerts -alias tomcat -keystore c:/jdk15/jre/lib/security/cacerts -storepass changeit(删除某一个证书)

     

    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    bzoj2733 永无乡 平衡树按秩合并
    bzoj2752 高速公路 线段树
    bzoj1052 覆盖问题 二分答案 dfs
    bzoj1584 打扫卫生 dp
    bzoj1854 游戏 二分图
    bzoj3316 JC loves Mkk 二分答案 单调队列
    bzoj3643 Phi的反函数 数学 搜索
    有一种恐怖,叫大爆搜
    BZOJ3566 概率充电器 概率dp
    一些奇奇怪怪的过题思路
  • 原文地址:https://www.cnblogs.com/jamesf/p/4751638.html
Copyright © 2011-2022 走看看