调用API中关联的证书问题

       我们在调用API时,会涉及到证书问题,这个是最麻烦的,他会将我们请求的数据进行各种加密,这个加密过程中往往加了时间戳、加密证书和公钥证书等一些数据在里面,还有加密的顺序等等,更恶心的还会将加密前的数据进行一次或多次加密,要多猥琐就有多猥琐,最终的请求中还使用了前面证书对数据进行签名,数据即使被别有用心的人拿到了,他不知道加密的顺序和加密的方法,还有证书的话,即使拿到了也没有用。

      先跟大家讲解一下这个证书

           证书一般来说有两个,一个是签名证书sign.pfx,另一个是加密证书enc.cer,看后缀就可分别

           一般来说,这两个证书都是提供API接口的公司给的,签名证书是我们自己的,这个签名证书是根据我们这边的数据生成的

           签名证书都有一个密码,这个密码是我们从ie中导出时设置的,或者是对方直接给的我们。

 

签名证书
        得到证书的路径和密码,通过这两个值来得到
列:
    p12 = crypto.load_pkcs12(open(sign_cert_file_path, 'rb').read(), pwd)    读取证书路径及密码
    p12.get_certificate()  # (signed) certificate object  声明证书对象
    p12.get_privatekey()  # private key.       声明私钥
    p12.get_ca_certificates()  # ca chain.     声明证书为中国证书
    return p12                                 将这个对象返回
 
有这个对象后
可以得到
   证书ID:str(sign_cert.get_certificate().get_serial_number())  这个值一定要强转为str类型,不转的话最后面会多个L
   私钥    p12.get_privatekey()

 

加密证书
   读取加密证书
  with open(encrypt_cert_file_path, 'rb') as f:
        public = f.read()   
        try:
            cert = load_pem_x509_certificate(public, backend=default_backend())  load_der_x509_certificate生成公钥私钥对
            return cert

返回的这个值可以得到:
   公钥:
     cert.public_key()
   证书ID:
     str(cert.serial_number)

等等一系列参数

     每个证书都有唯一的ID

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值