【证书知识】HTTPS、SSL、TLS、CA简要介绍

HTTPS、SSL、TLS三者之间的联系和区别

HPPTS是HTTP+SSL/TCP的简称
TLS就是SSL的新版本3.1

TLS/SSL是什么?

SSL:(Secure Socket Layer,安全套接字层),位于可靠的面向连接的网络层协议和应用层协议之间的一种协议层。SSL通过互相认证、使用数字签名确保完整性、使用加密确保私密性,以实现客户端和服务器之间的安全通讯。该协议由两层组成:SSL记录协议和SSL握手协议。

TLS:(Transport Layer Security,传输层安全协议),用于两个应用程序之间提供保密性和数据完整性。该协议由两层组成:TLS记录协议和TLS握手协议。

TLS/SSL是一种加密通道的规范,它们利用对称加密、公私钥不对称加密及其密钥交换算法,CA系统进行加密且可信任的信息传输

在HTTP SSL中常用的对称加密算法有RC4,AES,3DES,Camellia等

什么是证书?

  • “证书 – 为公钥加上数字签名”

公钥证书(Public-Key Certificate,PKC)其实和驾照很相似,里面记有姓名、组织、邮箱地址等个人信息,以及属于此人的公钥,并由认证机构(Certification Authority、Certifying Authority, CA)施加数字签名。只要看到公钥证书,我们就可以知道认证机构认定该公钥的确属于此人。公钥证书也简称为证书(certificate)。

CA证书 = 服务端公钥 + 认证机构的数字签名

证书的应用场景?

  1. A生成了一对公钥a.crt和私钥a.key。
  2. 认证机构B,用自己的私钥b.key对A的公钥a.crt施加数字签名并生成证书ca.crt。
  3. C使用认证机构B的公钥b.crt来验证B在ca.crt中数字签名,确定A的公钥的合法性。
  4. C用a的公钥加密的消息并发给A。

证书标准规范x.509

X.509标准定义了证书中应该包含哪些信息,并描述了这些信息是如何编码的(即数据格式)

一般来说,一个数字证书内容可能包括基本数据(版本、序列号) 、所签名对象信息( 签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥)、CA的数字签名,等等。

证书规范

前使用最广泛的标准为ITU和ISO联合制定的X.509的 v3版本规范 (RFC5280), 其中定义了如下证书信息域:

版本号(Version Number):规范的版本号,目前为版本3,值为0x2;
Version: 3 (0x2)

序列号(Serial Number):由CA维护的为它所发的每个证书分配的一的列号,用来追踪和撤销证书。只要拥有签发者信息和序列号,就可以唯一标识一个证书,最大不能过20个字节;
Serial Number: 0 (0x0)

签名算法(Signature Algorithm):数字签名所采用的算法,如:sha256-with-RSA-Encryption,ccdsa-with-SHA2S6
Signature Algorithm: sha256WithRSAEncryption

颁发者(Issuer):发证书单位的标识信息,如 ” C=CN,ST=Beijing, L=Beijing, O=org.example.com,CN=ca.org。example.com ”;
Issuer: CN=etcd-ca

有效期(Validity): 证书的有效期很,包括起止时间。
Validity
    Not Before: Jun 18 02:25:38 2020 GMT
    Not After : Jun 16 02:25:38 2030 GMT

主体(Subject) : 证书拥有者的标识信息(Distinguished Name),如:" C=CN,ST=Beijing, L=Beijing, CN=person.org.example.com”;
Subject: CN=etcd-ca

主体的公钥信息(SubJect Public Key Info):所保护的公钥相关的信息:

   公钥算法 (Public Key Algorithm)公钥采用的算法;

   Public Key Algorithm: rsaEncryption

   主体公钥(Subject Unique Identifier):公钥的内容。

颁发者唯一号(Issuer Unique Identifier):代表颁发者的唯一信息,仅2、3版本支持,可选;

主体唯一号(Subject Unique Identifier):代表拥有证书实体的唯一信息,仅2,3版本支持,可选:

扩展(Extensions,可选): 可选的一些扩展。中可能包括:

  Subject Key Identifier:实体的秘钥标识符,区分实体的多对秘钥;
  Basic Constraints:一指明是否属于CA;
     CA:TRUE
  Authority Key Identifier:证书颁发者的公钥标识符;
  CRL Distribution Points: 撤销文件的颁发地址;
  Key Usage:证书的用途或功能信息。
此外,证书的颁发者还需要对证书内容利用自己的私钥添加签名, 以防止别人对证书的内容进行篡改。

数字签名

数字签名就像一个人的指纹,也可以称为文件指纹,具有唯一性。

证书格式

X.509规范中一般推荐使用PEM(Privacy Enhanced Mail)格式来存储证书相关的文件。证书文件的文件名后缀一般为 .crt 或 .cer 。对应私钥文件的文件名后缀一般为 .key。证书请求文件的文件名后綴为 .csr 。有时候也统一用pem作为文件名后缀。

PEM格式采用文本方式进行存储。一般包括首尾标记和内容块,内容块采用Base64进行编码。

编码格式总结:
X.509 DER(Distinguished Encoding Rules)编码,后缀为:.der .cer .crt
X.509 BASE64编码(PEM格式),后缀为:.pem .cer .crt

而kubernetes的证书格式
私钥        .key
证书请求文件  .csr
证书        .crt

CA证书

  • CA颁发的证书

证书信任链

证书直接是可以有信任关系的, 通过一个证书可以证明另一个证书也是真实可信的. 实际上,证书之间的信任关系,是可以嵌套的。比如,C 信任 A1,A1 信任 A2,A2 信任 A3…这个叫做证书的信任链。只要你信任链上的头一个证书,那后续的证书,都是可以信任滴。

引用

数字证书及CA详解

一文看懂HTTPS、证书机构(CA)、证书、数字签名、私钥、公钥

数字签名是什么

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
要在mbedTLS中进行数字证书交换,需要以下步骤: 1. 生成RSA密钥对 使用mbedtls_pk_context结构体可以生成RSA密钥对,以下是一个简单的示例: ``` mbedtls_pk_context pk; mbedtls_ctr_drbg_context ctr_drbg; mbedtls_entropy_context entropy; const char* pers = "gen_key"; // 初始化随机数生成器 mbedtls_entropy_init(&entropy); mbedtls_ctr_drbg_init(&ctr_drbg); if (mbedtls_ctr_drbg_seed(&ctr_drbg, mbedtls_entropy_func, &entropy, (const unsigned char*)pers, strlen(pers)) != 0) { // 错误处理 } // 生成RSA密钥对 if (mbedtls_pk_setup(&pk, mbedtls_pk_info_from_type(MBEDTLS_PK_RSA)) != 0) { // 错误处理 } if (mbedtls_rsa_gen_key(mbedtls_pk_rsa(pk), mbedtls_ctr_drbg_random, &ctr_drbg, 2048, 65537) != 0) { // 错误处理 } ``` 2. 生成自签名数字证书 使用mbedtls_x509write_cert结构体可以生成自签名数字证书,以下是一个简单的示例: ``` mbedtls_x509write_cert crt; mbedtls_x509write_crt_init(&crt); // 设置证书版本号 mbedtls_x509write_crt_set_version(&crt, MBEDTLS_X509_CRT_VERSION_3); // 设置证书序列号 mbedtls_x509write_crt_set_serial(&crt, serial, sizeof(serial)); // 设置证书签名算法 mbedtls_x509write_crt_set_md_alg(&crt, MBEDTLS_MD_SHA256); // 设置证书有效期 mbedtls_x509write_crt_set_validity(&crt, "20210101000000", "20301231235959"); // 设置证书主题 mbedtls_x509write_crt_set_subject_name(&crt, "CN=MySelf"); // 设置证书颁发者 mbedtls_x509write_crt_set_issuer_name(&crt, "CN=MySelf"); // 设置证书公钥 mbedtls_x509write_crt_set_subject_key(&crt, &pk); // 生成证书 if (mbedtls_x509write_crt_der(&crt, buf, buf_size, mbedtls_ctr_drbg_random, &ctr_drbg) < 0) { // 错误处理 } mbedtls_x509write_crt_free(&crt); ``` 3. 导入数字证书 使用mbedtls_x509_crt结构体可以导入数字证书,以下是一个简单的示例: ``` mbedtls_x509_crt cert; mbedtls_x509_crt_init(&cert); // 导入数字证书 if (mbedtls_x509_crt_parse(&cert, cert_buf, cert_size) != 0) { // 错误处理 } ``` 4. 进行证书交换 使用mbedtls_ssl_context结构体可以进行SSL/TLS连接,以下是一个简单的示例: ``` mbedtls_ssl_context ssl; mbedtls_ssl_init(&ssl); // 设置SSL/TLS连接参数 if (mbedtls_ssl_config_defaults(&conf, MBEDTLS_SSL_IS_CLIENT, MBEDTLS_SSL_TRANSPORT_STREAM, MBEDTLS_SSL_PRESET_DEFAULT) != 0) { // 错误处理 } mbedtls_ssl_conf_ca_chain(&conf, &cert, NULL); if (mbedtls_ssl_conf_own_cert(&conf, &cert, &pk) != 0) { // 错误处理 } mbedtls_ssl_setup(&ssl, &conf); // 连接服务器 if (mbedtls_ssl_set_hostname(&ssl, hostname) != 0) { // 错误处理 } mbedtls_ssl_set_bio(&ssl, &net_ctx, mbedtls_net_send, mbedtls_net_recv, mbedtls_net_recv_timeout); while ((ret = mbedtls_ssl_handshake(&ssl)) != 0) { // 处理握手过程 } ``` 这个示例中,mbedtls_x509_crt_parse函数用于导入服务器端的数字证书,mbedtls_ssl_conf_ca_chain函数用于设置服务器端证书的链,mbedtls_ssl_conf_own_cert函数用于设置客户端证书,mbedtls_ssl_handshake函数用于进行SSL/TLS握手过程。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

^白开水^

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值