Java Security安全系列文档翻译笔记————数字签名、keystore、证书

Digital Signatures数字签名

1.Private Key(私钥)签名一个文档,生成一个Digitial Signature(数字签名)。

Private key通过keytool(SDK中的工具)或Security API方法,通过jarsigner工具或Security API方法生成Digitial Signaturre;

2.将于私钥对应的Public Key(公钥) 和 文档发送给接收方(私钥和公钥是对应的)

4.再通过Public Key验证文档是否未经过改动,和确定是你发送的

在用Public Key验证文件的Digital Signature之前,需要先验证Public key的权威性。这就需要你提供一包含Public Key和证书授权机构Key的证书。

Certificate证书:

组成:

1.一个Public key

2.一个证书拥有者(Owner)的可区分的实体信息(人、公司...),就是你的个人信息了

3.一个证书的Digitial Signature(数字签名),由证书发行者(issuer)签名证书得到的,证明Public Key确实是Owner的。

4.一个Issuer的可区分信息,即发行证书的组织信息

a:验证证书的有效性,是通过issuer的public key来验证 证书的Digital Signature。而改issuer的public key又可能包含在另一个证书里,这个证书又被另一个证书验证。如此验证下去,直到一个你已经信任的证书上。由此形成了一个认证链。

b.如果认证链无法建立,接收方可以计算证书的fingerprint(指纹,也就是特定信息吧),是通过命令行keytool -import 或者 -printcert。接收方通过电话问证书的持有者,对比以下他们fingerprint的是否一样,一样就证明证书没变过。

好了,通过a、b你可以确定Certificate(证书)没有被篡改。另一个潜在不确定因素是发送者的身份,有时候证书是self-signed(自签名):使用证书中Public key对应的Private key进行签名。也就是Issuer == Owner。

Self-signing a certificate在开发和测试时时有用的,然而在部署给用户之前,最好从被信任的第三方那里得到证书,将其作为certification authority(CA 认证机构)。步骤是:你发一个使用自签名证书的为了得到签名的请求(a selft-signed certificate signing request (CSR))给CA,CA验证你在CSR中的签名和你的个人信息。CA通过用自己的Private
key签名的证书证明你是该Public key的拥有者。任何信任该CA的public key的用户,就可以来验证该证书。在很多实例中,CA本身有一个更高级的CA给他的证书,导致形成了一个certificate chains(验证链)。

(PS:这就是为什么买火车票每次都需要安装证书,因为它是自签名的。之前没上过铁道部网站,肯定也没有信任。而一旦你信任了铁道部的证书,那么以后一旦铁道部的Private Key泄露,就会有N多假网站了。)

你信任的Certificates of entities通常会做位被作为trusted certificates(可信任证书)导入到keystore。证书里的Public key就可以验证对应的Private key的签名的文档、代码。验证的工具如下:

1.jarsigner公寓(如果你的文档,代码是在JAR包中)

2.API方法

3.运行时,当Policy File 允许用户读取资源,如果他的签名是授权的话(class 文件必须在JAR文件中)

when a resource access is attempted and a policy file specifies that the resource access is allowed for the code attempting the access if its signature is authentic. The code‘s class file(s) and signature must be in a JAR file.

因为要和代码一起发送证书,所以要导出证书:keytool -export和API方法可从你的keystore导出到文件。接收方可以接受keytool则可以使用keytool -import导入成为可信任的证书。

KeyStores

KeyStores是存储Private Keys和对应的Public Keys的受密码保护的数据库。其包含两种实体:1.上文提到的受信任的证书 2.key/证书实体。每个实体都包含private key和对应的Public key证书。每个条目通过alias(别名)来区分。

The keytool tool can be used to

  • Create private keys and their associated public key certificates
  • Issue certificate requests, which you send to the appropriate certification authority
  • Import certificate replies, obtained from the certification authority you contacted
  • Import public key certificates belonging to other parties as trusted certificates
  • Manage your keystore

的房

keytool工具可以被用于:

1.创建private keys和对应的public key的证书

2.发布验证请求给合适的证书授权机构

keytool -certreq -alias alias -file csrFile

将csrFIile(命令执行后,生成的。发送给验证机构)

3.导入回复的证书,验证其权威性

(验证机构会返回

4.导入证书

keytool -import -alias alias -file ABCCA.cer -keystore storefile

其中ABCA.cer是虚拟的证书名

5.管理keystore

以下为Tool和API的一些要点:

1.使用工具去签名文档,文档必须被打包。可以使用jar工具,然后再使用jarsigner去签名这个jar文件。

The cacerts file
represents a system-wide keystore with CA certificates.

场景:

ABC是一个CA(授权机构),你发送CSR(签名请求)给CA。CA返回给一个认证你Public key的证书,你需要导入你的keystore,但在这之前你要先验证这个证书的真实性。所以还要先导入CA的自签名,或上一级的CA证书。

CA发送的新的证书如何替换自签名的证书

keytool -import -trustcacerts
    -keystore storefile
    -alias alias 
    -file certReplyFile 

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

时间: 2024-10-07 18:36:31

Java Security安全系列文档翻译笔记————数字签名、keystore、证书的相关文章

Java Security安全系列文档翻译笔记————PolicyFile

地址是:http://docs.oracle.com/javase/tutorial/security/tour1/wstep1.html 主要是针对运行java代码的用户而言.让Java代码运行在Secure Manager的管理下,只有在Policy File中声明的权限,代码才可以执行相应的操作,以此来建立一个沙箱. 估计这也是Android的Permission授权机制也是这个哦. policytool工具:在sdk中D:\Program Files\Java\jdk1.6.0_43\b

java security接口和类的分布

     包    类/接口名称    说明 com.sun.security.auth.module JndiLoginModule 执行用户名/密码认证使用LDAP或者NIS com.sun.security.auth.module KeyStoreLoginModule 执行基于密钥存储的登录认证 com.sun.security.auth.module Krb5LoginModule 使用kerberos协议进行认证 java.lang SecurityException 表明违反安全,

[Java 安全]加密、解密与数字签名

引言 本文使用的密码学术语请见术语章节. Base64编码 算法简述 定义 Base64内容传送编码是一种以任意8位字节序列组合的描述形式,这种形式不易被人直接识别. Base64是一种很常见的编码规范,其作用是将二进制序列转换为人类可读的ASCII字符序列,常用在需用通过文本协议(比如HTTP和SMTP)来传输二进制数据的情况下.Base64并不是加密解密算法,尽管我们有时也听到使用Base64来加密解密的说法,但这里所说的加密与解密实际是指编码(encode)和解码(decode)的过程,其

Java的安全学习(包括加密,数字签名,证书和认证)

(1)消息摘要: 消息摘要(Message Digest)又称为数字摘要(Digital Digest).它是一个唯一对应一个消息或文本的固定长度的值,它由一个单向Hash加密函数对消息进行作用而产生.如果消息在途中改变了,则接收者通过对收到消息的新产生的摘要与原摘要比较,就可知道消息是否被改变了.因此消息摘要保证了消息的完整性.       消息摘要采用单向Hash 函数将需加密的明文"摘要"成一串128bit的密文,这一串密文亦称为数字指纹(Finger Print),它有固定的长

【Java 安全技术探索之路系列:J2SE安全架构】之六:安全管理工具

作者:郭嘉 邮箱:[email protected] 博客:http://blog.csdn.net/allenwells github:https://github.com/AllenWell [Java 安全技术探索之路系列:J2SE安全架构]章节列表 [Java安全技术探索之路系列:J2SE安全架构]之一:J2SE安全架构开篇 [Java 安全技术探索之路系列:J2SE安全架构]之五:类加载器 [Java 安全技术探索之路系列:J2SE安全架构]之六:安全管理工具 作为J2SE复合包的一部

Java Security:Java加密框架(JCA)简要说明

加密服务总是关联到一个特定的算法或类型,它既提供了密码操作(如Digital Signature或MessageDigest),生成或供应所需的加密材料(Key或Parameters)加密操作,也会以一个安全的方式生成数据对象(KeyStore或Certificate),封装(压缩)密钥(可以用于加密操作). Java Security API中,一个engine class就是定义了一种加密服务,不同的engine class提供不同的服务.下面就来看看有哪些engine class: 1)M

深入理解Android之Java Security第一部分

深入理解Android之Java Security(第一部分) 从事Android工作4年以来,只有前1年不到的时间是用C++在开发东西(主要是开发DLNA组件,目前我已将它们全部开源,参考http://blog.csdn.net/innost/article/details/40216763),后面的工作几乎都在用Java.自以为Java相关的东西都见过了,可前段时间有个朋友给我花了1个多小时讲解他们某套系统的安全体系结构,其中涉及到很多专业术语,比如Message Digest(消息摘要).

Java Security:keytool工具使用说明

Keytool用法说明 Keytool是一个key与cert的管理工具.使用keytool可以管理public key.private key,以及与key之相关的certificate. 1.command和option说明 1.1 command 使用keytool工具时,可以使用15种命令: 1.2 option Option是命令的参数,要了解某个命令的参数可以使用keytool –command_name –help来获取.例如:使用keytool –genkeypair –help可

[转]Java多线程干货系列—(一)Java多线程基础

Java多线程干货系列—(一)Java多线程基础 字数7618 阅读1875 评论21 喜欢86 前言 多线程并发编程是Java编程中重要的一块内容,也是面试重点覆盖区域,所以学好多线程并发编程对我们来说极其重要,下面跟我一起开启本次的学习之旅吧. 正文 线程与进程 1 线程:进程中负责程序执行的执行单元线程本身依靠程序进行运行线程是程序中的顺序控制流,只能使用分配给程序的资源和环境 2 进程:执行中的程序一个进程至少包含一个线程 3 单线程:程序中只存在一个线程,实际上主方法就是一个主线程 4