✨
AndroidSummary
  • Introduction
  • 漫品客户端技术总结
    • 小说模块介绍
      • Android不规则布局的实现(万能公式)
      • Android So动态加载原理分析与优雅实现
  • Android总结
  • Android基础
    • Android Activity启动模式
    • Android 之 ThreadLocal简析
    • Android之JNI开发总结
    • 堆和栈的区别
    • java中==,equals,hashcode
    • Java基础数据类型和引用类型的区别
    • Java内部类详解
    • Android 8.0之后Service使用问题
    • 初探RxJava以及结合Retrofit的使用
    • 深入理解--Android Loader
    • 异步线程大师Handler(源码+图+demo+常见问题)
  • [Android AIDL跨进程通信]
    • service的隐式启动和显示启动
    • 如何绕过 Android 8.0 startService 限制
  • Android内存管理
    • Android内存管理(官方概览)
    • Android内存管理(操作系统基础)
    • Android内存管理(内存管理基础)
    • Android内存管理(linux内存管理机制)
    • Android内存管理(Android的内存管理机制简析)
    • Android内存管理(Android对Linux系统的内存管理机制进行的优化)
    • Android内存管理(垃圾回收算法相关)
    • Android内存管理(JVM 、DVM(dalvik) 、ART联系与区别)
    • 命令行提取hprof文件
  • Android安全
    • Android签名攻与防
    • Smalidea+IntelliJ IDEA/Android Studio无源码调试
    • keystore CSR CER PKCS7之间的区别与联系
    • 公钥、私钥、数字签名(签名)、数字证书(证书) 的关系(图文)
    • KeyStore 和 TrustStore区别与联系
    • Android 安全分析和漏洞挖掘|工具集
  • JAVA基础
    • Java 流(Stream)、文件(File)和IO
    • [线程共享和协作]
      • 线程基础、线程之间的共享和协作
      • [synchronized local volatile Threadlocal如何实现线程共享]
        • Synchronized实现原理
        • CAS原理分析
        • Java并发编程:Callable、Future和FutureTask
    • [深入理解Java泛型]
      • 泛型的作用与定义
      • 通配符与嵌套
      • Java泛型擦除及其相关内容
    • [注解深入浅出]
      • 注解是什么,如何理解
      • 自定义注解与元注解
      • 注解的使用场景
    • [并发编程]
      • 线程共享和协作
Powered by GitBook
On this page
  • KeyStore
  • CSR
  • CER
  • PKCS #7 (p7b)

Was this helpful?

  1. Android安全

keystore CSR CER PKCS7之间的区别与联系

PreviousSmalidea+IntelliJ IDEA/Android Studio无源码调试Next公钥、私钥、数字签名(签名)、数字证书(证书) 的关系(图文)

Last updated 4 years ago

Was this helpful?

keystore CSR CER PKCS7之间的区别与联系

  • 对称加密:指的就是加、解密使用的同是一串密钥,所以被称做对称加密。 对称加密只有一个密钥作为私钥。 常见的对称加密算法:DES,AES等。

  • 非对称加密:指的是加、解密使用不同的密钥,一把作为公开的公钥,另一把作为私钥。

KeyStore

在大多数情况下,当我们的应用程序需要通过SSL / TLS进行通信时,我们将使用java keystore和java truststore。

通常,这些是受密码保护的文件,与我们正在运行的应用程序位于同一文件系统上。

在Java 8之前,这些文件的默认格式为JKS(android .keystore 也是jsk格式的证书)。

从Java 9开始,默认的密钥库格式为PKCS12。

  • JKS : 二进制格式,同时包含证书和私钥,一般有密码保护,只能存储非对称密钥对(私钥 + x509公钥证书)

  • PKCS#12是公钥加密标准,通用格式(rsa公司标准)。微软和java 都支持。它规定了可包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,在windows中可以直接导入到密钥区,注意,PKCS#12的密钥库保护密码同时也用于保护Key。

JKS和PKCS12之间的最大区别是JKS是Java专用的格式,而PKCS12是存储加密的私钥和证书的标准化且与语言无关的方式。

Android签名keystore文件也是jks格式,且1.8之后要求转换到p12格式

JKS证书创建 XXXXXX为证书密码

keytool -genkeypair -storetype JKS -keystore test.jks -storepass XXXXXX

PKCS12创建方式 XXXXXX为证书密码

keytool -genkeypair -keystore myKeystore.p12 -storetype PKCS12 -storepass XXXXXX

查看的keystore 证书公钥命令 XXXXXX为证书密码

keytool -list -rfc -keystore HOSAnyMarvel.jks -storepass XXXXXX

CSR

CSR 即证书签名申请(Certificate Signing Request),获取 SSL 证书,需要先生成 CSR 文件并提交给证书颁发机构(CA)。CSR 包含了公钥和标识名称(Distinguished Name),通常从 Web 服务器生成 CSR,同时创建加解密的公钥私钥对。

基于keystore文件创建证书请求文件csr,此处xxx需要与keystore文件中的alias保持一致

keytool -certreq -alias "xxxxx" -keystore HOSAnyMarvel.jks -file HOSAnyMarvel.csr

查看csr证书内容,csr为文本格式可直接打开,或使用openssl打开验证

openssl req  -text -in HOSAnyMarvel.csr

CER

用于存储公钥证书的文件格式。只包含公钥信息,一般只能用于解密使用(解密该公钥对应的私钥加密的数据)。

cer一般由CSR请求CA机构颁发,或从keystore文件中导出 导出cer命令,此处xxx需要与keystore文件中的alias保持一致,基于keystore导出cer需要密码:

keytool -exportcert -alias "xxxx" -keystore HOSAnyMarvel.jks -rfc -file HOSAnyMarvel.cer -storepass 123456

查看cer证书内容,cer为文本格式可直接打开,或使用openssl打开验证

keytool -printcert -file AnyMarvelHOS.cer

PKCS #7 (p7b)

SignedData对象,唯一有效的字段是证书。 特别是,签名和内容将被忽略。 如果不存在证书,则假定为零长度的CertPath。

Warning:PKCS#7不在认证路径中维护证书的顺序。 这意味着,如果将CertPath转换为PKCS#7编码的字节,然后再转换回去,则证书的顺序可能会更改,从而可能使CertPath无效。 用户应注意此行为。

简单理解 pkcs#7 格式文件为信封,为二进制格式,其中可以包含:证书(x509标准格式),公钥,消息体,数字签名等信息。

1. Android签名文件CERT.RSA本身为pkcs#7格式 2. 鸿蒙签名文件

pkcs7 格式的证书内容查看

openssl pkcs7 -inform DER -in AnymarvelHOSDebug.p7b  -print_certs -text

文本格式查看信封内部的其他内容

vim HOSAnyMarvel.p7b
:%!xxd

Java Cryptography Architecture Standard Algorithm Name Documentation for JDK 8