「pki读取java」读取pki失败

博主:adminadmin 2023-01-06 05:51:09 957

本篇文章给大家谈谈pki读取java,以及读取pki失败对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

本文目录一览:

PKI 体系

没有身份验证的情况下,在非对称加密中实现身份验证和密钥协商时,比如常用的 RSA 算法无法确保服务器身份的合法性,因为公钥并不包含服务器的信息。可能出现如下两种情况:

此时需要一种认证体系以确保通信者是安全可靠的。

PKI 的目标就是实现不同成员在不见面的情况下进行安全通信,当前采用的模型是基于可信的第三方机构,也就是 证书颁发机构 (certification authority,CA) 签发的证书。

PKI 通过数字证书认证机构 (CA) 将用户的个人身份跟公开密钥链接在一起。对每个证书中心用户的身份必须是唯一的。链接关系由注册和发布过程确定,取决于担保级别,链接关系可能由 CA 的各种软件或在人为监督下完成。

一个具体实例:

其他的还可以细分为中介证书、终端实体证书、授权证书、TLS 服务器证书、通配符证书、TLS 客户端证书

CA 根证书和服务器实体证书中间增加一层证书机构,即中介证书,证书的产生和验证原理不变,只是增加一层验证,只要最后能够被任何信任的 CA 根证书验证合法即可

具体例子可以看维基百科的例子:

点击浏览器地址栏的绿色小锁可以查看网站的证书链:

二级证书结构存在的优势:

服务器一般提供一条证书链,但也有多条路径的可能。以 交叉证书 为例,一条可信路径可以一直到 CA 的主要根证书,另外一条则是到可选根证书上。

CA 有时候会为同样的密钥签发多张证书,例如现在最常使用的签名算法是 SHA1,因为安全原因正在逐步迁移到 SHA256, CA 可以使用同样的密钥签发出不同签名的新证书。如果信赖方恰好有两张这样的证书,那么就可以构建出两条不同的可信路径。

再回过头来看中间人攻击,需要身份验证后中间人与 Server 通信时接收服务器的证书实现身份验证,但与客户端通信时无法向用户提供可信任的证书。

除非伪造一份证书 (很困难),或者骗取客户端信任,比如在客户机操作系统上添加中间人证书的完全信任,以此实现用户的信任和身份验证。

举个栗子:

使用抓包工具 Charles 时,如果想抓取 HTTPS 的内容,就需要安装其提供的证书并添加信任

没有信任时,抓取的 HTTPS 内容无法解析

取得信任后,抓取的 HTTPS 请求可以和 HTTP 请求一样直接读取

在这个过程中 Charles 就是一个中间人,而且可以完全获取 HTTPS 信息,因为用户安装并信任它的证书,也就可以做到身份验证。

使用隧道的原因是在不兼容的网络上传输数据,或在不安全网络上提供一个安全路径。

隧道通信的机制如下:

一些代理服务器需要认证信息来建立 tunnel. 常见的是 Proxy-Authorization 头域:

关于这个中间代理的详细信息见

讲到 Charles,不得不提另一个抓包工具 Wireshark。这两个工具的抓包原理不同,Charles 是通过代理过滤抓取本机的网络请求,主要抓 HTTP、HTTPS 的请求;

Wireshark 则是使用了 网卡混杂模式 - promiscuous mode ,可以抓取指定网卡上所有流过的包,可以抓取应用层、传输层、网络层的各种封包,但是正常情况下不能解析 HTTPS 的内容 (可以通过配置浏览器提供的对称协商密钥或者服务器的私钥来解密 TLS 内容)。

开启混杂模式时除了可以看到自己电脑上的网络封包,还可以看到目标地址不是本机的网络包 (如果路由器没有做网络分发的工作的话,完全有可能接收到其他电脑的网络包),还可以看到局域网内的广播等等。我看了一篇于此相关的网络攻击手段 - ARP 攻击 。

ARP(Address Resolution Protocol)即地址解析协议, 用于实现从 IP 地址到 MAC 地址的映射,即询问目标 IP 对应的 MAC 地址,如图

而 ARP 攻击者可以通过两种方式实现抓取监听局域网内全部或者想要的目标的网络数据:

java如何获取pki编号

AES对称加密本身带有加密传输!这代码能实现keytool

-genkey

-dname

CN=demo,

OU=softDept,

O=company,

L=puddon~

PKI 技术难不难学,发展前景如何!也就说找个从事PKI的公司大概能有几K的工资哦!我现在是搞java,想去学

PKI是一种身份认证技术,JAVA和他不是一条线,没有什么是好学的。发展都于自身的努力和兴趣挂钩

ssl 通道怎么实现? 搭建pki项目中有使用

我转贴一个关于SSL的详细解释:

SSL基础

为了保护敏感数据在传送过程中的安全,全球许多知名企业采用SSL(Security Socket Layer)加密机制。 SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。

然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十分之一。假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得。

=============

至于如果实现,需要在win2k server上安装证书服务器,用来发布证书,然后在IIS中WEB站点属性,目录安全性,证书,申请证书(这样通过证书服务器,就为这台IIS server,申请了一个证书)

但这时候,证书还并未在此站点上启用,需要“编辑”证书,

选择复选框“启用SSL”就可以了。

使用https://协议就可以访问此站点了,在浏览器状态栏上,出现黄色的“小锁”标志,就说明启用了SSL。

我以前也回答过这类的问题,你搜索一下。

用java怎么实现CA颁发的数字证书的认证功能

PKI 目前使用最多的非对称算法是 RSA。对于基于 RSA 的 PKI 而言,CA 应有一对 RSA 的公私钥对,私钥是 CA 的生命,严格保密,而公钥则发布给使用方。CA 签发一张证书的话,主要是使用 CA 的 RSA 私钥对证书进行签名,并将签名结果保存在证书当中。使用者通过 CA 发布的公钥来验证证书中的签名值,就可以确定该证书是否是由该 CA 签发的。自己要做的就是从证书中提取签名数据和用于签名的原始数据,再使用 CA 的公钥验证这个签名就可以了。

PKI知识点整理

分类:

摘要算法使用密码学hash函数,用于验证数据完整性(没有修改、插入、删除、或重放)。找到两个不同数据具有相同hash值的难度高。

输入数据的长度首先被填充为某固定长度分组的整数倍,填充的内容包括原始数据的位长度信息。安全性要求如下两种情况在计算上不可行(即没有攻击方法比穷举攻击更有效):

Hash算法一般是指Hash表的摘要算法,将不同的键值分散到不同的数组位置,允许少量的冲突碰撞。安全Hash算法(SHA)是使用最广泛的Hash函数

摘要函数——MD2/MD4/MD5数字签名

又称密码校验和,利用密钥 K 和可变长度的数据 M 生成固定长度的短数据块 MAC ,并将数据块附加在数据M之后:

$$

MAC = C(K, M)

$$

若对于数据的保密性要求不高(例如广播),可直接将消息 M 和 MAC 一起发给接受者,接收者收到后使用相同的密钥 K 和MAC函数 C 对消息 M 计算得出 MAC2 ,再对比两者是否相等。(这里设定通信双方共享相同的密钥 K )

若对于数据的保密性要求严格,可选择将消息 M 和 MAC 加密再发送:

$$

ENC = E(K_2, M||C(K_1,M))

$$

接收者收到数据后首先解密。

HMAC将Hash函数视为黑盒,将现有Hash函数作为一个模块,预先封装,在需要时直接使用。

OFB与CFB都采用将分组加密转换成流加密的方式

如图,用自己的话来描述就是缺多少bit,就在每个bit里填多少。该方式是8分组结构,只适合DES/3DES。

密钥运算包含两种操作(私钥操作、公钥操作),签名验签正是基于这两种操作:

$$

C=P^d mod n

$$

$$

P=C^d mod n

$$

使用签名的前提是使用公钥加密的密文只有私钥才能解开,使用私钥加密的密文只有公钥才能解开,确保了身份认证抗抵赖性。

过程:

至于填充模式,定义在PKCS#1: 00||BT||PS||00||D

使用RSA公钥运算,过程如下:

用途:用于非对称传输信息,比如Bob有一个信息想传给Alice,需使用Alice的公钥加密信息,传给Alice,Alice得到加密信息后使用自己的私钥即可解开读取信息。他人即使截获加密信息也无法解开,利用了大数分解难题。

使用RSA私钥运算,过程如下:

以上可以看出,私钥解密和签名的运算过程一致!

定义RSA公私钥数据表达形式,及加密,解密,签名,验签,填充过程,定义了数字签名如何计算,包括签名数据和签名本身的格式。

RSA公钥的ASN.1结构,可以表述为:名为RSAPublicKey的这个结构呢,就可以用来表述一个RSA公钥了。它有两个INTEGER型变量:modulus和publicExponent。

以下是对PKCS#1 OID的类型表示的定义

hashAlgorithm 支持的散列函数:

基于口令的加密规范Password-Based Cryptography Specification

目的:保护私钥文件的安全性

通过将原始口令+salt派生出新口令进行加密

PKSC5Padding(用于制定算法DES)对称加密填充方式,填充块固定为8个字节,填充值为待填充的长度,与PKCS7Padding类似。

加密消息的语法标准Cryptographic Message Syntax Version 1.5

结构:

pkcs7 各种类型数据结构的 DER 编解码通过宏在 crypto/pkcs7/pk7_asn1.c 中实现

数字信封流程:(A:发送方;B:接收方;SK:私钥;PK:公钥)

常用的用途有:

PKCS#7结构分析之签名

PKCS#7结构分析之数字信封

构造数字信封要能够达到以下功能:

因此该结构应该包含:

私钥封装格式Private_Key Information Syntax Specification Version 1.2

定义了私钥信息语法和加密私钥语法。

私钥类型任意,对称算法可设置

证书请求格式(主题,公钥,私钥签名)

RA注册流程:注册信息-审核通过-生成密钥-生成PKCS10请求-将信息和P10请求的公钥合并成CMP请求-发送到CA

介质接口格式:

对应于Windows的CSP,国密接口的SKF

带私钥的个人证书格式,包含私钥、证书、证书链、CRL...

X.509证书与509黑名单规范

X.509数字证书主体如下:

一个真实的X509数字证书包含:

以上结构表示一个完整的数字证书,主要项如下:

DER 编解码接口由宏在 crypto/asn1/x_x509.c 中实现,包括各自的new、free、i2d 和 d2i 函数:

Abstract Syntax Notation One,抽象语法标识,是与平台、语言无关的数据结构定义语法

BER、CER、DER、XER,可以编码成XML格式,不仅仅是常用的二进制流。

二进制流的TLV方式表达数据结构,如下:

证书撤销列表(Certificate Revocation List,简称 CRL),是一种包含撤销的证书列表的签名数据结构。基本的 CRL 信息有:被撤销证书序列号、撤销时间、撤销原因、签名者以及 CRL 签名等信息。

被撤销证书的信息:X509_REVOKED

crl信息主体:

完整crl数据结构:

轻量目录访问协议(Lightweight Directory Access Protocol),运行于TCP/IP之上。

目录的信息按照树型结构组织,数据结构:

在线证书状态协议(Online Certificate Status Protocol)

数据格式:

OCSP响应端检测:

双证书即双密钥(签名密钥对,加密密钥对)

(附:我曾今将整理的文件使用一款加密软件加密,选择加密密码的时候由于自己记不住长密码,又不想将长密码以任何形式记录下来,于是决定使用自认为固定的文件作为密钥,然后当再次使用文件解密的时候,被告知不是该文件。才想起,这个当时在我看来是固定的文件,由于版本需要被我修改了!整理的三个月的文件就这样脱胎换骨成了0110...)

主要操作包括产生私钥(key),构造证书请求(req),签发用户证书,自签发根证书。

对称算法和摘要算法全局初始化: OpenSSL_add_all_algorithms();

释放句柄: EVP_MD_CTX_cleanup(ctx);

公司加密邮件为标准SMIME格式,导出后得到.eml文件

使用 PKCS7 *SMIME_read_PKCS7(BIO *bio, BIO **bcont) 将bio读取到的SMIME格式保存在PKCS7格式内,然后通过PKCS7_dncrypt接口解密

错误处理应该尽可能多的包含各种信息,包括:

ERR_get_error获取第一个错误号

ERR_error_string根据错误码获取具体的错误信息,包括出错的库、出错的函数以及出错原因

ERR_print_errors_fp将错误打印到FILE中

pki读取java的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于读取pki失败、pki读取java的信息别忘了在本站进行查找喔。