DTLS协议中的509证书和密钥如何传输

Posted qianbo_insist

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DTLS协议中的509证书和密钥如何传输相关的知识,希望对你有一定的参考价值。

DTLS协议

在openssl中,创建DTLS环境都已经被封装好了

 ssl_ctx = SSL_CTX_new(DTLS_method());

接下去我们编程的时候有两种方式去使用DTLS,1 是直接读证书文件,2 是产生证书文件
如果我们本身没有证书,而又需要,可以立刻产生证书

X509* dtls_srtp::ssl_cert = NULL;
EVP_PKEY* dtls_srtp::ssl_key = NULL;
if (dtls_generate_keys(&ssl_cert, &ssl_key) != 0) 
            printf("Error generating DTLS key/certificate\\n");
            return -2;

当然如果有证书,直接就使用load载入就好

X509* dtls_srtp::ssl_cert = NULL;
EVP_PKEY* dtls_srtp::ssl_key = NULL;
dtls_load_keys(server_pem, server_key, &ssl_cert, &ssl_key)

x509

而里面的ssl_cert 就是x509,那么x509到底是什么东西呢?
实际上X.509 是密码学里公钥证书标准。证书己应用在包括TLS/SSL协议里.可以应用在电子签名服务中。X.509证书里含:
1、公钥
2、身份信息(比如网络主机名,组织的名称或个体名称等)
3、签名信息(可以是证书签发机构CA的签名,也可以是自签名)
4、证书吊销列表
5、从最终对证书进行签名的证书签发机构直到最终可信点为止的证书合法性验证算法。

因此,里面既包含了公钥信息,也包含了基本信息,还有就是签名,签名的概念和过程是:
1 消息发送者持有 私钥以及加密算法,如RSA或者ECC算法等
2 用私钥和加密算法对明文数据进行加密,得到密文数据,称为签体
3 把明文数据和密文数据同时给到消息接收者
4 消息接收者收到后,先取出密文数据,用公钥对密文解密,得到明文数据;
5 将明文数据和收到的明文数据做对比,如果相同则数据完整且可信

这是签名的过程,这样做有什么意义,就是一点:防止数据被篡改,明文的数据加上签名,可以判断明文是否被篡改,那么如果明文很长呢?整个过程很费事件,所以就产生了摘要算法,对明文进行hmac算法,实际上是一种hash算法,我的其他文章中有源代码,读者可以自己找。

DTLS协议中的密钥

而DTLS协议中,数据密钥是一个随机的数,而传输这个密钥就是通过对方的公钥加密,而对方收到以后,用私钥解密,得到了这个密钥,传输的时候使用数据密钥对称加密,是这样的,您理解了吗?

以上是关于DTLS协议中的509证书和密钥如何传输的主要内容,如果未能解决你的问题,请参考以下文章

详解 WebRTC 传输安全机制:一文读懂 DTLS 协议

安全-攻防-学习!

[转]如何创建一个自签名的SSL证书(X509)

DTLS-PSK算法抓包解析***

X.509

在第二个ClientHello之后,DTLS-Server无法正确回答