密钥格式标准PKCS,X.509

ASN.1

Abstract Syntax Notation One,抽象语法标记
ASN.1是一种 ISO/ITU-T 标准,用于描述对数据进行表示、编码、传输和解码。它提供了一整套正规的格式用于描述对象的结构,而不管语言上如何实现这些数据的具体方式,也不用去管到底是什么样的应用程序。ASN.1是一种标记语言,用于描述数据结构,但不对数据结构进行实现。也就是说ASN.1就是定义了一些结构和里面包含那些字段,然后被X.509和PKCS使用。

X.509(证书证书证书)

X.509 是密码学里公钥证书的格式标准。 TLS/SSL使用它,TLS/SSL是HTTPS的基础,所以HTTPS也使用它。公钥是只有一串,但是公钥证书信息可就多了,要有域名,企业,有效期,加密方式等信息。

X.509 证书己应用在包括TLS/SSL(WWW万维网安全浏览的基石)在内的众多 Internet协议里。同时它也用在很多非在线应用场景里,比如电子签名服务。X.509证书里含有公钥、身份信息(比如网络主机名,组织的名称或个体名称等)和签名信息(可以是证书签发机构CA的签名,也可以是自签名)。对于一份经由可信的证书签发机构签名或者可以通过其它方式验证的证书,证书的拥有者就可以用证书及相应的私钥来创建安全的通信,对文档进行数字签名。

另外除了证书本身功能,X.509还附带了证书吊销列表和用于从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。

X.509是ITU-T标准化部门基于他们之前的ASN.1定义的一套证书标准。

PKCS(密码学)

The Public-Key Cryptography Standards,公钥密码学标准,虽然叫公钥,但是他的标准里也规定了私钥的格式。
是由美国RSA数据安全公司及其合作伙伴制定的一组公钥密码学标准,其中包括证书申请、证书更新、证书作废表发布、扩展证书内容以及数字签名、数字信封的格式等方面的一系列相关协议。

到1999年底,PKCS已经公布了15个标准,其编号分别为PCKS#1~15。其中比较常用的有PKCS#1, PKCS#7, PKCS#8以及PKCS#12。

其中PKCS#8 就是私钥的格式标准

pem der

有了数据结构定义和内容定义之后,需要规定这些信息如何存储,也就是文件的编码方式。
DER使用二进制来描述内容。
PEM Privacy-Enhanced Mail,pem规定用ASCII码来描述数据,这就是人类可读的了。

区别

X.509是用在公钥证书上,使用范围较小,但是由于HTTPS的使用使得使用范围很广。而PKCS则是以学术形式系统化的定义了秘钥,但是在公钥证书上由于X.509已经广泛被应用了,所以PKCS就无法取代了,而私钥格式我们通常就会使用PKCS#8了。

实际应用

这里是Java用作客户端发起HTTPS请求,

public class SSLClient extends DefaultHttpClient {
 
    public SSLClient() throws Exception {
        super();
        //传输协议需要根据自己的判断
        SSLContext ctx = SSLContext.getInstance("TLS");
        X509TrustManager tm = new X509TrustManager() {
            @Override
            public void checkClientTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }
 
            @Override
            public void checkServerTrusted(X509Certificate[] chain,
                                           String authType) throws CertificateException {
            }
 
            @Override
            public X509Certificate[] getAcceptedIssuers() {
                return null;
            }
        };
        ctx.init(null, new TrustManager[]{tm}, null);
        SSLSocketFactory ssf = new SSLSocketFactory(ctx, SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);
        ClientConnectionManager ccm = this.getConnectionManager();
        SchemeRegistry sr = ccm.getSchemeRegistry();
        sr.register(new Scheme("https", 443, ssf));
    }
}
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值