TLS/SSL 协议详解 (7) SSL 数字证书的一些细节2

证书格式


编码格式

证书编码格式多种,但是不要根据文件后缀名(der,cer)等区分证书格式。

总的来说,证书分为2种,一种是二进制的、一种是进行base64编码的证书。前者使用notepad或者任意文本编辑器打开,显示乱码,后者则显示正常的base64编码后的数据。下图为经过base64编码后的证书,由BEGAIN和END包括。(老司机可能就发现了,有点像长了一点的迅雷下载链接)


  至于是否换行完全取决于习惯,但是我的确也碰到过有些解析程序要求一行不能超过特定字符。

  所谓二进制证书,也就是原始的asn1格式的证书,如果熟悉asn1编码方式,直接看2进制会看到明显的’30 82 ...’等asn1的类型长度标识,这里不再赘述,但是二进制不适合网络传输,所以普遍采用base64将其编码。

  其次还有一种格式叫pfx(PKCS12)格式的证书,与其说是证书,不如叫它证书+私钥的package比较合适,一个文件即包含证书(证书链),也包含私钥。pfx本身可被加密,所以可能需要输入密钥才能解析pfx。

  另一种证书格式称之为p7b,他是多个证书组织成的格式(一般是证书链)。在windows下可以由windows自带程序解析,我们可以提取出其中各个证书。

私钥格式
私钥格式也分为二进制和base64编码,不再赘述。

但是私钥本身可以被加密。


被加密的私钥格式如下


当采用pfx格式证书时,由于pfx格式文件本身可能需要密钥来解密,而里面的私钥也可能需要密钥解密,所以解析程序往往可能让你输入2个密钥,这2个密钥是用来解密不同层级数据的,注意不要感到疑惑或者将两者混淆。

证书类型


签名算法一般采用RSA或者ECC。较老的有DH算法等,目前已不多见。

但是注意,被称为RSA证书并不是指证书是被RSA算法签名的,而是指证书本身的公钥、私钥是RSA。同理ECC证书指的是证书的公钥和私钥具有椭圆曲线属性。证书的签名值并不影响证书的属性。

例如,上级证书A是ECC证书,即证书公钥私钥是ECC属性的,那么由它生产的证书B的签名必然采用ECC签名,但是B本身可以使用RSA公钥私钥或者ECC公钥私钥。


证书拓展

使用wireshark解析SSL证书,我们可以清晰的看到数字证书各个字段,这里我们关心证书中的extension

1:keyusage/extkeyusage

  用以描述证书的用法,改证书可以进行证书的签发?CRL的签发?客户端认证?服务器认证?一般严格的CA机构都谨慎设置这个字段,避免自己签发的证书被滥用。

2:subectkeyidentifier

  自己公钥进行hash运算后的值,可以快速判断证书。

3:authoritykeyidentifier

  上级证书的公钥进行hash运算后的值。一般来说,两个上下级关系的证书,下级证书的authoritykeyidentifier值就是上级证书的subectkeyidentifier值。

4:subjectAltname

  证书的别名。例如一个网站有多个域名,例如www.baidu.com和www.hao123.com对应的都是一个服务器,common name只能写一个,为了不让浏览器告警,可以在subjectAltname拓展中添加这个网站的其他域名。浏览器收到这个证书,除了判断host和common name是否一致外,也会判断host和subjectAltname是否有一致项,有的话就成功。

5:basicConstraints

  一般CA证书里面ca:Ture
--------------------- 
作者:Mrpre 
来源:CSDN 
原文:https://blog.csdn.net/mrpre/article/details/77867210 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Nginx是一款高性能的Web服务器和反向代理服务器,它也支持SSL/TLS加密协议。为了配置Nginx的SSL/TLS,你需要进行以下步骤: 1. 获取SSL证书:首先,你需要从可信任的证书颁发机构(CA)或者使用自签名证书来获取SSL证书证书一般包括公钥、私钥和证书链。 2. 将证书文件放置在合适的位置:将获取到的证书文件放置在一个安全的目录中,例如"/etc/nginx/ssl/"。 3. 配置SSL参数:在Nginx的配置文件中,找到需要启用SSL的server块。在该块中添加以下配置参数: ``` listen 443 ssl; ssl_certificate /etc/nginx/ssl/certificate.crt; # SSL证书文件路径 ssl_certificate_key /etc/nginx/ssl/private.key; # 私钥文件路径 ``` 这些配置项指定了监听端口为443,并且指定了SSL证书和私钥的路径。 4. 配置SSL协议和密码套件:为了增强安全性,你可以配置Nginx使用特定的SSL协议版本和密码套件。以下是一个示例配置: ``` ssl_protocols TLSv1.2 TLSv1.3; # 仅启用TLSv1.2和TLSv1.3协议 ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512; # 指定密码套件 ssl_prefer_server_ciphers on; # 优先使用服务器指定的密码套件 ``` 这个示例配置启用了TLSv1.2和TLSv1.3协议,并且指定了密码套件。 5. 重启Nginx服务:完成以上配置后,保存并退出Nginx配置文件。然后,使用命令重启Nginx服务,以使配置生效。 ``` sudo service nginx restart ``` 配置完成后,Nginx将开始通过HTTPS监听443端口,并使用配置的SSL证书进行加密通信。请确保你的SSL证书有效,并按照最佳实践进行SSL/TLS配置。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值