check_issued
check_chain_extensions
check_name_constraints
check_trust
check_revocation
internal_verify
check_policy
其中 internal_verify (在线查看)验证了证书的有效期, 进入这个函数, 在 1654 行找到这个代码:
ok = check_cert_time(ctx, xs)
if (!ok)
goto end
看看 check_cert_time 函数, 确认是检查 notBefore 和 notAfter, 因此将上面三行代码注释掉, 验证证书时就不会检测有效期了.
然后就是重新编译 openssl, 将 libcrypto.a 集成到项目里了~
签字是基于非对称算法加密文件特征码的一种特殊的算法。就是用非对称算法,加密文件经过不可逆算法计算出来的哈希值,也就是特征码。这种特征码因为是不可逆算法,你没办法简单的修改了文件后还能保持相同的特征码(当然理论上是存在的,但因为算法复杂而且整个文件都在参与计算,需要保证相同特征码而且文件还起作用几乎不可能,除非有很强的计算机性能强行去猜)。特征码很小,可以作为一种文件正确性的标识符号。
非对称算法,就是加密和解密是两个不同的算法,或者不同的数据,有两个钥匙 A 和 B 。用 A 加密的,可以用 B 解密,相反,用 B 加密的,可以用 A 解密。而且 A、B 不能互相计算出来对方,只能同时生成(当然如果计算机足够多,性能足够强势可以算出来的,不过现在的技术是全球计算机一起跑,也需要几万年)。
作用,就是你计算文件哈希值后,再用你这边的密匙解密加密后的签字数据,获得对方提供的哈希值做比对,来确定你得到的文件是不是被修改了。
你的密匙和对方加密的密匙配套,而且哈希值一致。那么就可以认定这个文件内容签字,这个文件是对方提供的,中间没有经过他人的修改,也没有发生文件的损坏。
这种被修改或者损坏后,签字还能同样的概率太低了。
PKI (Public Key Infrastructure )公开密钥基础设施,是利用公开密钥技术所构建的,解决网络安全问题的,普遍适用的一种基础设施是一种遵循既定标准的密钥管理平台,它能够为所有网络应用提供加密和数字签名等密码服务及所必需的密钥和证书管理体系。
PKI既不是一个协议,也不是一个软件,它是一个标准,在这个标准之下发展出的为了实现安全基础服务目的的技术统称为PKI。PKI通过传播数字证书来保证安全,于是认证中心CA就变成了PKI的核心。
认证中心CA(Certificate Authority) 是一个负责发放和管理数字证书的第三方权威机构,它负责管理PKI结构下的所有用户(包括各种应用程序)的证书,把用户的公钥和用户的其他信息捆绑在一起,在网上验证用户的身份。CA机构的数字签名使得攻击者不能伪造和篡改证书。
认证中心主要有以下5个功能:
证书的颁发:接收、验证用户(包括下级认证中心和最终用户)的数字证书的申请。可以受理或拒绝
证书的更新:认证中心可以定期更新所有用户的证书,或者根据用户的请求来更新用户的证书
证书的查询:查询当前用户证书申请处理过程;查询用户证书的颁发信息,这类查询由目录服务器ldap来完成
证书的作废:由于用户私钥泄密等原因,需要向认证中心提出证书作废的请求;证书已经过了有效期,认证中心自动将该证书作废。认证中心通过维护证书作废列表 (Certificate Revocation List,CRL) 来完成上述功能。
证书的归档:证书具有一定的有效期,证书过了有效期之后就将作废,但是我们不能将作废的证书简单地丢弃,因为有时我们可能需要验证以前的某个交易过程中产生的数字签名,这时我们就需要查询作废的证书。
PKI的标准规定了PKI的设计、实施和运营,规定了PKI各种角色的”游戏规则”,提供数据语法和语义的共同约定。PKI体系中有很多SSL证书格式标准。
其中最为人熟知的有x.509和PKCS#12(pfx, p12为证书后缀)
1. 证书版本号(Version)
版本号指明X.509证书的格式版本,现在的值可以为: 0:v1, 1:v2, 2:v3
2. 证书序列号(Serial Number)
序列号指定由CA分配给证书的唯一的"数字型标识符"。当证书被取消时,实际上是将此证书的序列号放入由CA签发的证书废除列表CRL(Certificate revocation lists 证书黑名单)中,
3. 签名算法标识符(Signature Algorithm)
签名算法标识用来指定由CA签发证书时所使用的"签名算法"。算法标识符用来指定CA签发证书时所使用的公开密钥算法或hash算法
4. 签发机构名(Issuer)
此域用来标识签发证书的CA的X.500DN(DN-Distinguished Name)名字。包括:
1) 国家(C) 2) 省市(ST) 3) 地区(L) 4) 组织机构(O) 5) 单位部门(OU) 6) 通用名(CN) 7) 邮箱地址
5. 有效期(Validity)
指定证书的有效期,包括:
1) 证书开始生效的日期时间 2) 证书失效的日期和时间
每次使用证书时,需要检查证书是否在有效期内。
6. 证书用户名(Subject)
指定证书持有者的X.500唯一名字。包括:
同签发机构名(Issuer)中的条目
7. 证书持有者公开密钥信息(Subject Public KeyInfo)
证书持有者公开密钥信息域包含两个重要信息:
1) 证书持有者的公开密钥的值 2) 公开密钥使用的算法标识符。此标识符包含公开密钥算法和hash算法。
8. 扩展项(extension)
X.509V3证书是在v2的基础上一标准形式或普通形式增加了扩展项,以使证书能够附带额外信息。
9. 签发者唯一标识符(Issuer Unique Identifier)
签发者唯一标识符在第2版加入证书定义中。此域用在当同一个X.500名字用于多个认证机构时,用一比特字符串来唯一标识签发者的X.500名字。可选。
10. 证书持有者唯一标识符(Subject Unique Identifier)
持有证书者唯一标识符在第2版的标准中加入X.509证书定义。此域用在当同一个X.500名字用于多个证书持有者时,用一比特字符串来唯一标识证书持有者的X.500名字。可选。
11. 签名算法(Signature Algorithm)
证书签发机构对证书上述内容的签名算法
12. 签名值(Issuer's Signature)
证书签发机构对证书上述内容的签名值
证书案例
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)