keystore_keystore翻译 - CSDN
精华内容
参与话题
  • Android keystore简介、生成、查看

    万次阅读 2018-08-21 14:58:25
    三部分keystore简介、生成方式,查看keystore信息 一、keystore简介 Keytool :是一个有效的安全钥匙和证书的管理工具,Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书; keystore:数字...

    三部分keystore简介、生成方式,查看keystore信息

    一、keystore简介

    Keytool :是一个有效的安全钥匙和证书的管理工具,Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书;

    keystore:数字证书,是一个存储了证书的文件。文件包含证书的私钥,公钥和对应的数字证书的信息。

    这里不多介绍了,以下这篇文章讲的可以的,转载代码咖啡https://www.jianshu.com/p/644ddb6e3d9c

    二、生成keystore方式(两种studio、命令行生成keystore)

    1、studio生成,一下两个步骤。选择“Create new keystore”,按步骤操作即可

     

    2、命令行生成

    dos下进入JDK的bin目录

    运行如下命令:

    keytool -genkey -alias android.keystore -keyalg RSA -validity 20000 -keystore android.keystore

    (-validity 20000代表有效期天数),命令完成后,bin目录中会生成android.keystore

    查看命令keytool -list -keystore "android.keystore" 输入你设置的keystore密码

    三、查看keystore信息

    命令行查看keystore信息:

    1、打开CMD命令行进入本机安装的jdk或jre下的bin目录;

    2、命令行输入:keytool -list -v -keystore 你的keystore路径 -storepass 密码;

    如下面是生成方式一生成的keystore:sample_keystore.jks

    输入命令:keytool -list -v -keystore C:\studioworkplace\studySample\Sample\keystore\sample_keystore.jks -storepass 123456

    展开全文
  • Android KeyStore + FingerprintManager 存储密码

    万次阅读 多人点赞 2016-11-08 11:41:25
    Android KeyStore系统允许你存储加密密钥,keystore也分为多种。如果是”AndroidKeyStore”这种类型的话,keystore难以从设备中导出,并且可以指明key的使用规则,例如只有用户验证后,才可以使用key等。但如果是bks...

    Android KeyStore系统允许你存储加密密钥,keystore也分为多种。如果是”AndroidKeyStore”这种类型的话,keystore难以从设备中导出,并且可以指明key的使用规则,例如只有用户验证后,才可以使用key等。但如果是bks这种的话,就比较容易导出。稍后会解释两种的区别。下面主要是讲AndroidKeyStore这种keystore。
    防止导出的方法:

    • Key material never enters the application process.
    • Key material may be bound to the secure hardware(e.g., Trusted Execution Environment(TEE), Secure Element(SE)) of the Android device.

    可以通过以下代码获取你的KeyStore。

    try {
        KeyStore mKeyStore = KeyStore.getInstance(“YourType");
    } catch (KeyStoreException e) {
        return;
    }
    

    KeyStore.getInstance(参数)中的参数可以传以下内容:

    • “AndroidKeyStore”:这里要先区分下AndroidKeyStore和Android KeyStore,虽然这两个一样,但是后者中间多了个空格,意义是不一样的,前者是子集,后者是父集,后者包含前者。而AndroidKeyStore主要是用来存储一些密钥key的,存进该处的key可以为其设置KeyProtection,例如只能通过用户验证才能取出key使用等。这些key是存在系统里的,不是在app的目录下,并且每个app不能访问其他app的key,如果app1创建了key1,并且存储的时候命名为temp,app2去通过temp去访问key,是获取不到的!!
    • KeyStore.getDefaultType():该函数返回的是一个字符串,在java下,返回的是JKS,在Android下,返回的是BKS( 生成android使用的BKS证书)。(注:android 系统中使用的证书要求以BKS的库文件结构保存,通常情况下,我们使用java的keytool只能生成jks的证书库。读取key可以通过psw来读取)。当你使用这个keystore的时候,其文件存放在data(沙盒中)。
    • 其他情况,还有一些其他的keystore,我目前暂不清楚,但有看到过传一些其他的参数。

    这里说下当你在百度上搜索keystore的时候,相信查出来大都是Android签名什么的,那keystore和签名有什么关系呢?
    签名的话其实是对一个app加上开发者的签名,证明这个app和开发者的关系。通过签名可以证明这个是正版的app,如果是假冒伪劣的app,那么是不允许安装的。这怎么说呢?其实就是用了签名keystore文件,在该文件中有一对非对称密钥,签名的时候使用私钥对apk中所有的文件内容进行加密,并且签名后的apk携带keystore文件中的公钥,当安装在手机系统上的时候系统会取出公钥,对apk进行验证,查看是不是使用正确私钥加密的apk,或者apk是否被人篡改过。如果篡改过,那么公钥验证不通过。具体可以看这篇文章: 证书Certificate以及android打包签名
    那key分为哪些呢:

    • Symmetric key(对称密钥): secret key
    • Asymmetric key(非对称密钥): public key && private key
      这里写图片描述

    如何生成key,可以通过以下两个类:

    • KeyGenerator(KeyPairGenerator): 根据一些指定的参数,例如算法,补码模式等参数,来生成一个新的key。
    • KeyFactory: 当服务器想告知客户端key,只是将key的byte数组传过来,可以通过这个类来还原key。
      当然生成key的时候,你要说明,可以通过KeySpec的子类来说明。

    看一个生成key和还原key的例子:

    //对称key即SecretKey创建和导入,假设双方约定使用DES算法来生成对称密钥
    KeyGeneratorkeyGenerator = KeyGenerator.getInstance("DES");
    //设置密钥长度。注意,每种算法所支持的密钥长度都是不一样的。DES只支持64位长度密钥
    keyGenerator.init(64);
    //生成SecretKey对象,即创建一个对称密钥,并获取二进制的书面表达
    SecretKey secretKey = keyGenerator.generateKey();
    byte[] keyData =secretKey.getEncoded();
    //日常使用时,一般会把上面的二进制数组通过Base64编码转换成字符串,然后发给使用者
    String keyInBase64 =Base64.encodeToString(keyData,Base64.DEFAULT);
     e(TAG,“==>secret key: encrpted data =”+ bytesToHexString(keyData));
     e(TAG,"==>secrety key:base64code=" + keyInBase64 +“  key:alg=" + secretKey.getAlgorithm());
    
    
    //假设对方收到了base64编码后的密钥,首先要得到其二进制表达式,用二进制数组构造KeySpec对象。对称key使用SecretKeySpec类
     byte[] receivedKeyData =Base64.decode(keyInBase64,Base64.DEFAULT);
    SecretKeySpec keySpec =new SecretKeySpec(receivedKeyData,”DES”);
    //创建对称Key导入用的SecretKeyFactory
    SecretKeyFactorysecretKeyFactory = SecretKeyFactory.getInstance(”DES”);
    //根据KeySpec还原Key对象,即把key的书面表达式转换成了Key对象
    SecretKey receivedKeyObject = secretKeyFactory.generateSecret(keySpec);
    byte[]encodedReceivedKeyData = receivedKeyObject.getEncoded();
    e(TAG,"==>secret key: received key encoded data ="+bytesToHexString(encodedReceivedKeyData));

    这里写图片描述

    实际应用:
    如果app想存储一段字符Content(类似密码或者token)在客户端,如何利用keyStore保证其安全性,防止被他人读取。
    下面是我自己一步步得出最后方案的过程:

    1.如果将Content存入KeyStore,那么只能通过将Content作为Key存入KeyStore中,刚刚讲过生成key的时候有两种方法,一种是生成key,一种是还原key(keyFactory),因为我们这里已经知道content,那么是还原key,通过KeyFactory。
    2.该key属于SecretKey,因为没有私钥和公钥的概念。应该使用PBE算法(Password Based Encryption基于密码加密)来生成。
    3.接下来就是生成key的过程。刚刚说过生成key的时候,需要指明key的一些参数,通过KeySpec的子类。查了一下,正好有PBEKeySpec!
    上代码:

    //根据内容生成secret key
    PBEKeySpec keySpec = new PBEKeySpec(content.toCharArray());
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA1ANDDES");
    SecretKey key = keyFactory.generateSecret(keySpec);
    KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(key);
    //存储key
    keyStore.setEntry(keyName, entry, new KeyStore.PasswordProtection(psw.toCharArray()));

    PBEWITHSHA1ANDDES这个是加密的算法,主要的算法是PBE,加之sha1和des。
    4。接下来就是存储在哪个KeyStore。因为我们生成的是SecretKey,如果存在AndroidKeyStore中,会抛出异常。因为AndroidKeyStore对于SecretKey只支持AES和HMAC。
    这里写图片描述
    所以目前只能存在BKS这个keyStore中,也就是数据是放在沙盒中的。
    完整的生成和存储key的代码:

    File file = new File(context.getFilesDir(), "temp");
    if (!file.exists()) {
         keyStore.load(null, null);
         file.createNewFile();
         return;
    }
    FileInputStream in = new FileInputStream(file);
    keyStore.load(in, psw.toCharArray());
    in.close();
    PBEKeySpec keySpec = new PBEKeySpec(token.toCharArray());
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("PBEWITHSHA1ANDDES");
    SecretKey key = keyFactory.generateSecret(keySpec);
    KeyStore.SecretKeyEntry entry = new KeyStore.SecretKeyEntry(key);
    KeyProtection.Builder builder = new KeyProtection.Builder(KeyProperties.PURPOSE_VERIFY);
    builder.setUserAuthenticationRequired(true);
    mKeyStore.setEntry(“alias", entry, builder.build());
    mkeyStore.store(null);

    在上述代码中,在load keyStore的时候,为其指定了密码(psw.toCharArray())。在存数据的时候,也为其添加了密码保护。
    现在数据已经存好了,但是不安全啊,因为如果只要将手机Root,就可以拿到沙盒中的数据。而且psw是app写死的,如果别人知道了我们的psw呢???岌岌可危!!
    至此为止,我们上述的方案并没有安全性可言,而且好像和指纹半毛钱关系也没有。下面讲解真正的解决方案:

    现在增加安全性!前面已经提到如果将key存放在AndroidKeyStore中,可以为key设置一些保护(KeyProtection),比如说用户验证过才可以使用key,那我们可以利用这点来增加安全性。
    首先我们生成一个key,并指定在用户验证后才可以使用这个key,并且存放在AndroidKeyStore中。说明下这个key是用来去加密content(也就是我们真正想要加密的数据,例如我们的密码),然后将加密后的内容存储。这个时候,加密Content的key已经收到保护了,只能通过身份验证才可以取出(例如指纹,当然还有其他方案,例如ConfirmCredentials,看android官网),那么key加密Content的结果(result)放哪里呢?是不是还需要放到一个隐秘的地方,将他保护起来呢?答案是不用的,因为即使result被拿到了,也是一串被加密过后的字符串而已,别人并不能通过result拿到我们的content,所以你将result放哪里都行,这里我就简单的放到sharePreference中。
    当你想要取出的时候,先使用指纹验证,然后取出AndroidKeyStore中的key,再取出sharepreference中的result,用key解密取出content。
    用这种方案较为安全!
    看代码:
    在AndroidKeyStore中生成key

    void generateKey() {
        //这里使用AES + CBC + PADDING_PKCS7,并且需要用户验证方能取出,这里生成加密content的key
        try {
            final KeyGenerator generator = KeyGenerator.getInstance(KeyProperties.KEY_ALGORITHM_AES, "AndroidKeyStore");
            mStore.load(null);
            final int purpose = KeyProperties.PURPOSE_DECRYPT | KeyProperties.PURPOSE_ENCRYPT;
            final KeyGenParameterSpec.Builder builder = new KeyGenParameterSpec.Builder("key", purpose);
            builder.setUserAuthenticationRequired(true);
            builder.setBlockModes(KeyProperties.BLOCK_MODE_CBC);
            builder.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_PKCS7);
            generator.init(builder.build());
            generator.generateKey();
            LogUtil.d("生成加密密钥成功");
        } catch (Exception e) {
            LogUtil.d("生成加密密钥失败");
            e.printStackTrace();
        }
    }

    取出key为content加密:

    mKeyStore.load(null);
    final SecretKey key = (SecretKey) mKeyStore.getKey("key", null);
    if (key == null) return;
    final Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"+ KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
    cipher.init(Cipher.ENCRYPT_MODE, key);
    final FingerprintManager.CryptoObject crypto = new FingerprintManager.CryptoObject(cipher);
    mFingerprintManager.authenticate(crypto, null, 0, new SimpleAuthenticationCallback() {
                @Override
                public void onAuthenticationSucceeded(final FingerprintManager.AuthenticationResult result) {
                    final Cipher cipher = result.getCryptoObject().getCipher();
                    byte[] encrypted = cipher.doFinal(content.getBytes());
                    byte[] IV = cipher.getIV();
                    String result= Base64.encodeToString(encrypted, Base64.URL_SAFE);
                    Log.d("tag", “result:” + result);
                }
         }, new Handler());
    

    取出key为加密的内容解密:

    mKeyStore.load(null);
    final SecretKey key = (SecretKey) mKeyStore.getKey("key", null);
    if (key == null) return;
    final Cipher cipher = Cipher.getInstance(KeyProperties.KEY_ALGORITHM_AES + "/"+ KeyProperties.BLOCK_MODE_CBC + "/" + KeyProperties.ENCRYPTION_PADDING_PKCS7);
    cipher.init(Cipher.DECRYPT_MODE, key, new IvParameterSpec(mIV));
    final FingerprintManager.CryptoObject crypto = new FingerprintManager.CryptoObject(cipher);
    mFingerprintManager.authenticate(crypto, null, 0, new SimpleAuthenticationCallback() {
                @Override
                public void onAuthenticationSucceeded(final FingerprintManager.AuthenticationResult result) {
                          final Cipher cipher = result.getCryptoObject().getCipher();
                          Log.d("tag", "Base 64 of data to decrypt is:\n" + Base64.encodeToString(encryptedToken, Base64.URL_SAFE) + "\n");
                          try {
                                     byte[] decrypted = cipher.doFinal(mEncrypted.getBytes());
                                     Log.d("tag", "Decrypted data is:\n" + Base64.encodeToString(decrypted, Base64.URL_SAFE) + "\n");
                         } catch (IllegalBlockSizeException | BadPaddingException e) {}
                }
       }, new Handler());

    全部的代码地址:https://github.com/LxxCaroline/FingerprintSample

    代码比较简陋,只是个demo,哈哈,记住每次重启APP时要先点击加密,再点击解密,否则会出错,具体看下评论区。

    展开全文
  • 关于keystore的简单介绍

    万次阅读 2018-05-11 09:45:00
    Keytool是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。 在keystore里,包含两种数据: 1. 密钥实体(Key entity)——密钥(secret key)又或者是私钥...

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

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

    JDK中keytool常用命令:

    -genkey 在用户主目录中创建一个默认文件”.keystore”,还会产生一个mykey的别名,mykey中包含用户的公钥、私钥和证书 
    (在没有指定生成位置的情况下,keystore会存在用户系统默认目录,如:对于window xp系统,会生成在系统的C:\Documents and Settings\UserName\文件名为“.keystore”) 
    -alias 产生别名 
    -keystore 指定密钥库的名称(产生的各类信息将不在.keystore文件中) 
    -keyalg 指定密钥的算法 (如 RSA DSA(如果不指定默认采用DSA)) 
    -validity 指定创建的证书有效期多少天 
    -keysize 指定密钥长度 
    -storepass 指定密钥库的密码(获取keystore信息所需的密码) 
    -keypass 指定别名条目的密码(私钥的密码) 
    -dname 指定证书拥有者信息 例如: “CN=名字与姓氏,OU=组织单位名称,O=组织名称,L=城市或区域名称,ST=州或省份名称,C=单位的两字母国家代码” 
    -list 显示密钥库中的证书信息 keytool -list -v -keystore 指定keystore -storepass 密码 
    -v 显示密钥库中的证书详细信息 
    -export 将别名指定的证书导出到文件 keytool -export -alias 需要导出的别名 -keystore 指定keystore -file 指定导出的证书位置及证书名称 -storepass 密码 
    -file 参数指定导出到文件的文件名 
    -delete 删除密钥库中某条目 keytool -delete -alias 指定需删除的别 -keystore 指定keystore -storepass 密码 
    -printcert 查看导出的证书信息 keytool -printcert -file yushan.crt 
    -keypasswd 修改密钥库中指定条目口令 keytool -keypasswd -alias 需修改的别名 -keypass 旧密码 -new 新密码 -storepass keystore密码 -keystore sage 
    -storepasswd 修改keystore口令 keytool -storepasswd -keystore e:\yushan.keystore(需修改口令的keystore) -storepass 123456(原始密码) -new yushan(新密码) 
    -import 将已签名数字证书导入密钥库 keytool -import -alias 指定导入条目的别名 -keystore 指定keystore -file 需导入的证书

    · 

    创建keystore文件 
    keytool -genkey -alias dotuian -keystore dotuian.keystore -keyalg RSA 
    生成一个名为 dotuian.keystore 的文件

    · 

    · 

    检查一个keystore:

    · 

    keytool -list -v -keystore dotuian.keystore

    Enter keystore password:your password(输入密码)

    · 1

    · 2

    · 输出keystore到一个文件:testkey:

    keytool -export -alias dotuian -keystore dotuian.keystore -rfc -file dotuian.cer

    Enter keystore password:your password(输入密码)

    · 1

    · 2

    将把证书库 dotuian.keystore 中的别名为 dotuian 的证书导出到 dotuian.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。

    · 查看保存在文件中的证书

    keytool -printcert -file dotuian.cer

    · 1

    · 输入证书到一个新的truststore

    keytool -import -alias tomcat -file testkey -keystore truststore

    · 1

    · 2

    个人分类: Java

    展开全文
  • keystore 介绍

    万次阅读 2013-01-16 08:43:26
    keystore 介绍 博客分类:  j2se   Keytool 是一个有效的安全钥匙和证书的管理工具.  Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名...

    keystore 介绍

    博客分类:  j2se
     

    Keytool 是一个有效的安全钥匙和证书的管理工具. 
    Java 中的 keytool.exe (位于 JDK\Bin 目录下)可以用来创建数字证书,所有的数字证书是以一条一条(采用别名区别)的形式存入证书库的中,证书库中的一条证书包含该条证书的私钥,公钥和对应的数字证书的信息。证书库中的一条证书可以导出数字证书文件,数字证书文件只包括主体信息和对应的公钥。 
    Keytool 把钥匙和证书储存到一个keystore.默任的实现keystore的是一个文件.它用一个密码保护钥匙. 
    (2) 
    关于证书的几个概念: 
        一个证书是一个实体的数字签名,还包含这个实体的公共钥匙值. 
            公共钥匙 :是一个详细的实体的数字关联,并有意让所有想同这个实体发生信任关系的其他实体知道.公共钥匙用来检验签名; 
            数字签名:是实体信息用实体的私有钥匙签名(加密)后的数据.这条数据可以用这个实体的公共钥匙来检验签名(解密)出实体信息以鉴别实体的身份;        
            签名:用实体私有钥匙加密某些消息,从而得到加密数据; 
            私有钥匙:是一些数字,私有和公共钥匙存在所有用公共钥匙加密的系统的钥匙对中.公共钥匙用来加密数据,私有钥匙用来计算签名.公钥加密的消息只能用私钥解密,私钥签名的消息只能用公钥检验签名。 
            实体:一个实体可以是一个人,一个组织,一个程序,一台计算机,一个商业,一个银行,或其他你想信任的东西. 
        实际上,我们用[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年。 

    [2] 
    详细分析如下: 
    Keystore的别名: 
    所有的keystore入口(钥匙和信任证书入口)是通过唯一的别名访问.别名是不区分大小写的.如别名Hugo和 
    hugo指向同一个keystore入口. 
    可以在加一个入口到keystore的时候使用-genkey参数来产生一个钥匙对(公共钥匙和私有钥匙)时指定别 
    名.也可以用-import参数加一个证书或证书链到信任证书. 
    如: 
    1. 
    keytool -genkey -alias duke -keypass dukekeypasswd 
    其中duke为别名,dukekeypasswd为duke别名的密码.这行命令的作用是产生一个新的公共/私有钥匙对. 
    假如你想修改密码,可以用: 
    keytool -keypasswd -alias duke -keypass dukekeypasswd -new newpass 
    将旧密码dukekeypasswd改为newpass. 
    可以用-keystore指定其名时,将产生指定的keystore. 
    2. 
    检查一个keystore: 
    keytool -list -v -keystore keystore 
    Enter keystore password:your password(输入密码) 
    3.输出keystore到一个文件:testkey: 
    keytool -export -alias duke -keystore keystore -rfc -file testkey 
    系统输出: 
    Enter keystore password:your password(输入密码) 
    Certificate stored in file 
    例如:keytool -export -keystore monitor.keystore -alias monitor -file monitor.cer 
    将把证书库 monitor.keystore 中的别名为 monitor 的证书导出到 monitor.cer 证书文件中,它包含证书主体的信息及证书的公钥,不包括私钥,可以公开。 
    4.输入证书到一个新的truststore: 
    keytool -import -alias dukecert -file testkey -keystore truststore 
    Enter keystore password:your new password.(输入truststore新密码) 
    将keystore导入证书中这里向Java默认的证书 cacerts导入Rapa.cert 
    keytool -import -alias RapaServer -keystore cacerts -file Rapa.cert -keystore cacerts 
    5.证书条目的删除 
    keytool的命令行参数 -delete 可以删除密钥库中的条目,如: keytool -delete -alias RapaServer -keystore d2aApplet.keystore ,这条命令将 d2aApplet.keystore 中的 RapaServer 这一条证书删除了。 

    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指定新密码。 
    [3] 
    自己的实例 
    (1)用法总结: 
    1. 
    keystore好像一个数据库.每种操作,都要先指定keystore名与密码,以及操作的对象别名如: 
    ..... -alias AAA -keystore jServer.keystore -storepass 123456 
    2. 
    操作的一般格式: 
    keytool + 操作类型[-genkey,-list -v,-printcert -file,-import -flie,-export -file,-delete,- 
    keypasswd -new,-storepasswd -new] + 再加上上面的格式. 
    (2)实例 
    C:\keytool>keytool -genkey -alias jason -keystore jServer.keystore -keyalg RSA 
    输入keystore密码:  1234 
    Keystore 密码太短 -至少必须为6个字符 
    输入keystore密码:  123456 
    您的名字与姓氏是什么? 
      [Unknown]:  huang 
    您的组织单位名称是什么? 
      [Unknown]:  access 
    您的组织名称是什么? 
      [Unknown]:  access 
    您所在的城市或区域名称是什么? 
      [Unknown]:  sz 
    您所在的州或省份名称是什么? 
      [Unknown]:  gd 
    该单位的两字母国家代码是什么 
      [Unknown]:  china 
    CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 正确吗? 
      [否]:  y 
    输入<jason>的主密码 
            (如果和 keystore 密码相同,按回车):  74123 
    主密码太短 -至少必须为 6 个字符 
    输入<jason>的主密码 
            (如果和 keystore 密码相同,按回车):  456789 
    C:\keytool>keytool -list -v -keystore jServer.keystore 
    输入keystore密码:  123456 
    Keystore 类型: jks 
    Keystore 提供者: SUN 
    您的 keystore 包含 1 输入 
    别名名称: jason 
    创建日期: 2009-6-24 
    输入类型:KeyEntry 
    认证链长度: 1 
    认证 [1]: 
    Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    序号: 4a40fd0f 
    有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009 
    认证指纹: 
             MD5:  4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48 
             SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9 

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

    C:\keytool>keytool -export -alias jason -keystore jServer.keystore -rfc -file jasonfile 
    输入keystore密码:  123456 
    保存在文件中的认证 <jasonfile> 
    C:\keytool>keytool -export -alias jason -keystore jServer.keystore -storepass 123456 -rfc -f 
    ile jasonfile2 
    保存在文件中的认证 <jasonfile2> 
    C:\keytool>keytool -export -alias jason -keystore jServer.keystore -storepass 123456 -rfc -f 
    ile jasonfile.cer 
    保存在文件中的认证 <jasonfile.cer> 
    C:\keytool>keytool -printcert -file jasonfile.cer 
    Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    序号: 4a40fd0f 
    有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009 
    认证指纹: 
             MD5:  4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48 
             SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9 
    C:\keytool>keytool -keypasswd -alias jason -keypass 456789 -new 20070423 -keystore jServer - 
    storepass 123456 
    keytool错误: java.lang.Exception: Keystore 文件不存在: jServer 
    C:\keytool>keytool -keypasswd -alias jason -keypass 456789 -new 20070423 -keystore jServer.k 
    eystore -storepass 123456 
    C:\keytool>keytool -list -v -alias jason -storepass 123456 
    keytool错误: java.lang.Exception: Keystore 文件不存在: C:\Documents and Settings\Administr 
    ator\.keystore 
    C:\keytool>keytool -list -v -alias jason -keystore jServer.keystore -storepass 123456 
    别名名称: jason 
    创建日期: 2009-6-24 
    输入类型:KeyEntry 
    认证链长度: 1 
    认证 [1]: 
    Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    序号: 4a40fd0f 
    有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009 
    认证指纹: 
             MD5:  4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48 
             SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9 
    C:\keytool>keytool -delete -alias jason -keystore jServer.keystore -storepass 123456 
    C:\keytool>keytool -list -v -alias jason -keystore jServer.keystore -storepass 123456 
    keytool错误: java.lang.Exception: 别名 <jason> 不存在 
    C:\keytool>keytool -import -alias hwj -file jasonfile.cer -keystore jServer.keystore -storep 
    ass 123456 
    Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    序号: 4a40fd0f 
    有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009 
    认证指纹: 
             MD5:  4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48 
             SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9 
    信任这个认证? [否]:  y 
    认证已添加至keystore中 
    C:\keytool>keytool -list -v -alias jason -keystore jServer.keystore -storepass 123456 
    keytool错误: java.lang.Exception: 别名 <jason> 不存在 
    C:\keytool>keytool -list -v -alias hwj -keystore jServer.keystore -storepass 123456 
    别名名称: hwj 
    创建日期: 2009-6-24 
    输入类型: trustedCertEntry 
    Owner: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    发照者: CN=huang, OU=access, O=access, L=sz, ST=gd, C=china 
    序号: 4a40fd0f 
    有效期间: Wed Jun 24 00:04:31 CST 2009 至: Tue Sep 22 00:04:31 CST 2009 
    认证指纹: 
             MD5:  4A:67:84:5E:C2:5E:3E:16:05:1D:A9:F4:72:79:13:48 
             SHA1: 01:4A:5A:76:8E:1B:00:D3:5E:FD:CA:3A:D0:52:4E:57:BA:03:26:B9 
    C:\keytool>keytool -storepasswd -new 20070423 -keystore jServer.keystore -storepass 123456 

    展开全文
  • keystore的简单介绍

    2016-07-22 15:13:01
    关于keystore的简单介绍 Keytool是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。  在keystore里,包含两种数据:  1. 密钥实体(Key entity)——...
  • Android debug.keystore的密码

    万次阅读 2013-06-19 12:17:18
    在Eclipse里面编译生成的APK中有一个签名的,它默认的key是debug.keystore,它默认的路径是: C:\Users\\.android\debug.keystore 这个key的密码是:android ===============================================...
  • jks与keystore区别

    千次阅读 2019-06-13 16:14:58
    keystore 是Eclipse 打包生成的签名。 jks是Android studio 生成的签名。 都是用来打包的,并保证应用的唯一性,这就是他们的最大的区别! 备注:很多第三方市场,我们上传apk的时候,他们只支持keystore,需要我们把....
  • keystore生成证书实例

    2020-07-16 13:59:18
    关于keystore的简单介绍 Keytool是一个Java数据证书的管理工具 ,Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。 在keystore里,包含两种数据: 1. 密钥实体(Key entity)——密钥...
  • Android Studio 默认keystore 以及自定义keystore

    万次阅读 多人点赞 2016-05-19 22:19:34
    我们使用Android Studio 运行或测试我们的app 它使用一个默认的debug.keystore进行签名。 这个默认签名(keystore)是不需要密码的,它的默认位置在 $HOME/.android/debug.keystore,如果不存在Android studio会自动...
  • 可以分别通过debug.keystore和release.keystore获取。2.干货获取debug.keystore的方法有两种,先说一种最快速的,进入as项目中,如图 第一步,左边在android方式下查看项目, 然后点击gradle scripts
  • java keystore导出.pfx .key .crt 私钥

    热门讨论 2020-07-30 23:33:23
    Java KeyStore文件转换为微软的.pfx文件和OpenSSL的PEM格式文件(.key + .crt) 运行方式: JKS2PFX <KeyStore文件> <KeyStore密码> 别名> <导出文件名> [Java Runtime的目录] Java Runtime的目录,指包含Java.exe和...
  • keyStore和truststore区别

    千次阅读 2018-08-04 22:40:37
    当然这个可以保存在keystore中。 我们自己的应用中通常所说的keystore或者truststore主要是针对于应用本身的需求来的。 keystore和truststore从其文件格式来看其实是一个东西,只是为了方便管理将其分...
  • keystore转x509pem工具

    热门讨论 2020-07-30 23:32:24
    在使用signapk工具签名时,是需要 x509.pem + pk8格式的证书,它是一个公私钥分开存放的格式,在电脑上生成的证书一般是以 keystore格式存放的,有时在证书签发机构申请的证书也是 keystore格式的。这时用signapk...
  • Keytool或Keystore使用及证书转换

    万次阅读 2018-03-05 22:52:55
    本文主旨在将keytool的使用还有keystore证书的转换想了解证书的基础知识点击:证书的基础知识想了解openssl的使用及证书转换点击:OpenSSl使用及证书转换1.1证书生成//创建新的密钥对到密钥库中,回车后需要创建密钥...
  • java存取密码于keystore文件中

    千次阅读 2017-12-05 11:04:44
    最近项目有一个需求,客户要求将密码保存在keyStore文件中。平时开发的WEB项目,密码明文都是加密后以密文的形式保存在数据库中,第一次遇到这种需求,网上查阅相关资料,大多都是基于android的代码,没有找到基于B/...
  • elasticsearch-keystore 命令解释 命令用途 ES的大部分配置参数是通过明文存储在配置文件中,一般通过文件系统的所属用户、所属组和读写权限(rwx机制)提供基本的保护。但是有一些比较敏感的ES配置参数仅仅通过文件...
  • Androrid KeyStore, KeyStore TA (二)

    千次阅读 2018-05-31 09:45:43
    目标Android Keystore API 和底层 Keymaster HAL 提供了一套基本的但足以满足需求的加密基元,以便使用访问受控且由硬件支持的密钥实现相关协议。除了扩大加密基元的范围外,Android 6.0 中的 Keystore 还增加了以下...
  • 查看KeyStore证书信息

    千次阅读 2014-02-25 18:21:33
    今天接手以前的一个项目,发现经过几个人的手后有了四个不同的KeyStore,为了匹配谷歌商店发布的最新apk的证书,就想到了匹配KeyStore里面的sha1。 1. cmd进入到目录下,我的路径为: 2. 在目录下你会看到一个...
  • 在unity打包安卓的时候会使用一个默认的keystore文件,文件路径在C:/User/当前用户名/.android/debug.keystore,如果用不同的电脑打包这个keystore文件是不一样的,所以在不同电脑上打出的安卓包,在安装更新时就会...
  • keystore文件背景 当我们集成高德地图或腾讯SDK等第三方平台时,经常会让我们注册写入应用的SHA1码,这就牵涉到了应用的签名。包括: 1,签名文件的生成 2,应用签名过程 jarsign是Java本生自带的一个工具,他可以对...
1 2 3 4 5 ... 20
收藏数 56,111
精华内容 22,444
关键字:

keystore