SCEP协议简介

本篇绝大部分内容出自CISCO官方文档,本人对此协议理解也并不深刻,本人水平有限,有条件的请移步CISCO官方文档: https://www.cisco.com/c/en/us/support/docs/security-vpn/public-key-infrastructure-pki/116167-technote-scep-00.html

  • 概述
    SCEP(Simple certificate enrollment protocol), 简单证书注册协议,最初由CISCO起草,简而言之,就是一个用来注册数字证书的协议,“数字证书”本篇不再过多介绍。

  • SCEP的特点

    • 基于HTTP的请求/响应模式(使用GET方法,POST也可以支持)
    • 只支持RSA加密(目前国际通用、使用广泛的公钥算法也就RSA, ECC, 而ECC是没有公钥加密,私钥解密标准的,我猜这个特点有这个原因吧)
    • 证书请求用PKCS #10标准(就是一个证书请求格式和数据标准,本篇不做介绍)
    • 采用PKCS #7标准传输签名/加密数据(HTTP请求非常不安全,容易被拦截,篡改)
    • 支持服务器异步授权,客户端定期轮询
    • 具有有限的证书吊销列表(CRL)检索支持(首选方法是通过CRL分发点(CDP)查询,出于可伸缩性原因)(翻译自官方文档,本人水平有限,对CRL还没有什么理解)
    • 不支持在线证书吊销
    • 需要在证书签名请求(CSR)中使用质询密码字段,该字段必须仅在服务器和请求者之间共享(翻译自官方文档,对这个也不是很清楚,知道的大佬还望不吝赐教哈)
  • 证书注册过程简述

    • 取得CA证书,并对其进行验证
    • 生成一个CSR(Certificate Signing Reques),并把它安全地传输到CA
    • 轮询SCEP服务器,检查证书是不是已经被签名了
    • 如果需要, 检索CRL
  • 证书注册流程

    • 客户端 :取得服务器CA证书:
      客户端发送一个请求,通常的取得CA证书的请求格式 : GET /cgi-bin/pkiclient.exe?operation=GetCACert , 发送该请求后SCEP服务器会传回服务器的CA证书, 这时只是取得了服务器的CA证书,并没有做认证
    • 服务器 :返回CA证书给客户端
    • 客户端 :生成SCEP请求,发送给服务器:
      证书签发请求最终会封装成一个HTTP请求通过GET方式发送给服务器, 格式类似:/cgi-bin/pkiclient.exe?operation=PKIOperation&message=
      MIIHCgYJKoZIhvcNAQcCoIIG%2BzCCBvcCAQExDjA… 请求很长,这里省略。
      下面解析一下这个HTTP请求具体的内容:
      “message=” 后面是一串URL编码的请求字符串,对其进行URL解码后, 它将是一个base64编码的PKCS #7签名数据, 这个数据是被客户端签名的, 用以证明客户端确实发送了这段数据,且这段数据确实是客户端发送的,且在传输过程中没有被非法篡改… 总而言之, 是为了保证数据传输的完整、不可篡改、不可抵赖性
      这段PKCS #7签名数据的内容:借CISCO官方图片一用,很清晰:SCEP请求消息
      这张图我们从右向左来解释比较容易理解:
      客户端本地生成一个基础的PKCS #10证书签发请求(CSR),这里不再多介绍,这里用一个随机生成的对称加密算法密钥对CSR进行加密,再用CA的公钥(从CA证书提取)加密这个对称密钥,再加上CA证书、版本号,这样就组合成了一个PKCS #7数字信封, 客户端用自己的私钥对这个数字信封做个签名,加上数字信封本身, 客户端自签名证书,哈希算法,版本号, 就组成了一个完整的PKCS #7签名数据, 对其进行编码后就是以上“message=”后面的数据了
    • 服务端响应 :
      • 拒绝
      • 挂起
      • 成功:请求成功,服务器返回证书或CRL
        服务器响应数据如下:在这里插入图片描述
        从左往右看:同样是一个PKCS #7签名数据, 其中有CA证书,被签名的数据,签名, 哈希算法,客户端使用CA公钥对签名做认证,认证完成后取出被签名的数据,是一个PKCS #7数字信封,结构同上,客户端使用自己的私钥解密出其中包含的对称加密密钥,使用该密钥解密被解密的数据,再从中提取出签发的数字证书或CRL

下面介绍一下上面用到的SCEP请求格式
GET CGI-path/pkiclient.exe?operation=operation&message=message HTTP/version

  • CGI-path :指向处理SCEP请求的公共网关接口(CGI)程序(翻译有点怪,我还不太理解,总之是SCEP服务器的地址,端口,原文:“CGI-path is dependent on the server and points to the Common Gateway Interface (CGI) program that handles SCEP requests”)

  • operation:

    • PKIOperattion: 需要message字段, 它可以是以下类型:
      • PKCSReq : PKCS #10 CSR
      • GetCertInitial : 轮询CSR的是否已经签发证书
      • GetCert / GetCRL : 取得证书或CRL
    • GetCACert:获取CA证书, message字段可以省略
  • message:该字段可能是一个pkiMessage结构,是一个经过DER和base64编码的PKCS #7签名数据结构,它包含:

    • PKCS#7 SignedData 结构示意见上面两张图片
    • PKCS#7 EnvelopedData 结构示意见上面两张图片
      • messageData : CSR, CRL,证书…
    • SignerInfo with authenticatedAttributes:一些属性
      • transactionID, messageType, senderNonce :用于鉴别客户端身份,senderNonce 是一个一次性的随机数,发送者填充,收到响应后响应包中也有senderNonce, 可做进一步校验数据是否被篡改
      • pkiStatus :仅在SCEP响应中有,标志当前请求的响应状态(0:成功,2:拒绝,3:挂起,等待审核)
      • recipientNonce :接收者的Nonce, 也是一个一次性随机数
      • failInfo : 仅在失败时有,标识失败原因
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值