用Python库pyOpenSSL读取iOS的p12证书

1、前言

本文主要是讲解如何用python读取p12的信息。
如果有过iOS团队开发经验的朋友,一定对p12有所了解,因为苹果开发者网站制作的cer证书,只能用生成上传苹果后台的 CSR(Certificate Signing Request)文件 ————CertificateSigningRequest.certSigningRequest 的macOS系统安装使用,同时,普通个人开发账号最多可注册iOS Development/Distribution 证书各2个。所以,p12 就是解决在多个电脑之间共享证书的一种方式。本文不会详解iOS证书相关知识,可以查看本文末的参考链接。

2、p12证书

在讲解之前,先给大家说说原理。 p12 — KCS12 file holds the private key and certificate. 个人信息交换(personal information exchange file)
p12 存放了证书和私钥,使用的是DER编码。那什么是DER呢? 这里就要讲讲证书的知识:
证书标准
X.509 - 一种证书标准,主要定义了证书中应该包含哪些内容。其详情可以参考RFC5280,SSL 使用的就是这种证书标准。

证书标准

X.509 - 一种证书标准,主要定义了证书中应该包含哪些内容。其详情可以参考RFC5280,SSL 使用的就是这种证书标准。

编码格式

同样的X.509证书,可能有不同的编码格式,目前有以下两种编码格式:

  • DER - Distinguished Encoding Rules,打开看是二进制格式,不可读.

  • PEM - Privacy Enhanced Mail,打开看文本格式,以"-----BEGIN…“开头,”-----END…"结尾,内容是BASE64编码。

所以,要查看p12的内容,最好是转换成PEM格式。那么这里一种证书标准的格式,就需要实现了这种标准的工具就能解析:

  • OpenSSL - OpenSSL是SSL的一个实现,SSL只是一种规范。理论上来说,SSL这种规范是安全的,目前的技术水平很难破解,但SSL的实现就可能有些漏洞,如著名的"心脏出血"。OpenSSL还提供了一大堆强大的工具软件,强大到90%我们都用不到。

所以,使用 OpenSSL 就可以读取p12的信息,可以通过以下命令把p12转换为pem

openssl pkcs12 -in XXX.p12  -out XXX.pem -nodes

执行命令后,会要求输入p12文件的密码,如果密码错误:Mac verify error: invalid password? ,如果密码正确:MAC verified OK

示例:

p12:
在这里插入图片描述
pem:

在这里插入图片描述

pyOpenSSL 使用

所以,python 解析 p12 可以使用 pyOpenSSL ,这里就没有什么多说的,看代码就好:

先安装 pyOpenSSL

pip install pyOpenSSL

p12文件读取代码:

# load OpenSSL.crypto
from OpenSSL import crypto

# open it, using password. Supply/read your own from stdin.
p12 = crypto.load_pkcs12(open("/Users/HTC/Desktop/HTC.p12", 'rb').read(), '123456')

cer = p12.get_certificate()     # (signed) certificate object
pkey = p12.get_privatekey()      # private key.
ca_cer = p12.get_ca_certificates() # ca chain.
print(cer, pkey, ca_cer)

print('版本', cer.get_version())
print('签名算法', cer.get_signature_algorithm())
print('序列号:', cer.get_serial_number())
print('证书是否过期:', cer.has_expired())
print('在此之前无效:', cer.get_notBefore())
print('在此之后无效', cer.get_notAfter())



#主题名称
subject = cer.get_subject()
s_components = subject.get_components()
print(s_components)

key_dict = {'UID': '用户 ID',
			'CN': '常用名称',
			'OU': '组织单位',
			'O': '组织',
			'C': '国家或地区'
			}

for (key, value) in s_components:
	print(key, value)
	print(key_dict.get(key.decode(), key))

#签发者名称
suer = cer.get_issuer()
print(suer.get_components())

#证书扩展信息
print('扩展数:', cer.get_extension_count())
print('扩展1:', cer.get_extension(0))

总结

现在 Xcode8 之后,已经可以通过登陆开发者账号,自动下载和管理证书,从而减少开发者配置证书遇到的各位问题,非常的方便。当然,如果是多人开发或跨域团队,或者不想让开发人员拿到最高权限,使用p12还是目前最好的方式!因为如果一个主账号下的子账号都可以操作证书,其实影响和安全性很难保证,所以,苹果也有一定道理,很难在Xcode的账号中,分权限管理吧。

关于证书,这里只是介绍的说说p12的简单知识,证书体系有非常多的标准和知识,还需要多学习多实战,加油!

关于Python技术储备

学好 Python 不论是就业还是做副业赚钱都不错,但要学会 Python 还是要有一个学习规划。最后大家分享一份全套的 Python 学习资料,给那些想学习 Python 的小伙伴们一点帮助!

一、Python所有方向的学习路线

Python所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。(文末获取!)
在这里插入图片描述
温馨提示:篇幅有限,已打包文件夹,获取方式在“文末”!!!

二、Python必备开发工具

在这里插入图片描述

三、精品Python学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

四、Python视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述
在这里插入图片描述

五、实战案例

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

六、Python练习题

检查学习结果。
在这里插入图片描述

七、面试资料

我们学习Python必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有阿里大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。
在这里插入图片描述
在这里插入图片描述

这份完整版的Python全套学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值