python 处理java生成的证书流程

python 处理java生成的证书流程,以及公钥私钥加密,加签验签,aes加解密(这里用的是M2Crypto库里面的RSA X509 EVP)

java生成的jks证书python不能直接使用需要转换成pem格式可用以下命令(需要先安装keytool(网上很多例子))
 keytool -importkeystore -srckeystore xxxx.jks -destkeystore xxxx.p12 -srcstoretype jks -deststoretype pkcs12
 上一命令只是生成p12文件再由p12文件生成pem文件(关于p12格式自己可以网上查一下证书格式)
 openssl pkcs12 -in xxxx.p12 -out xxxx.pem(生成加密的pem文件)
 
 openssl pkcs12 -nodes -in xxxx.p12 -out xxxx.pem(生成非加密的pem文件)
 
 至此证书格式转换完成
 
 先说公钥加解密(这里用的是RSA源码地址https://gitlab.com/m2crypto/m2crypto/blob/master/M2Crypto/RSA.py)
 
 获取密钥对我用的是RSA.load_key(file, callback=util.passphrase_callback)
 file既是pem证书文件的地址,callback为回调函数,即自己写一个pem证书密码返回的函数
 例如def pass():
        return ‘111111‘
公钥加密RSA.public_encrypt(self, data, padding)data是待加密的数据 pading(个人理解是一种补全格式)    
公钥解密RSA.public_decrypt(self, data, padding)data是待解密的数据 pading(个人理解是一种补全格式)
私钥加密RSA.private_encrypt(self, data, padding)data是待加密的数据 pading(个人理解是一种补全格式)    
私钥解密RSA.private_decrypt(self, data, padding)data是待解密的数据 pading(个人理解是一种补全格式)
补充如果单独从类似‘‘‘xxxx‘‘‘这样的字符串中获取公钥加密
可用kkk = X509.load_cert_der_string(data)如果data是经过base64加密的需要先进行解密,在调用 kkk.get_pubkey()获取公钥对象
即可进行加密
aes加解密直接上码
加密:
def AES_build_cipher(key, iv, op):
    return EVP.Cipher(alg=‘aes_128_cbc‘, key=key, iv=iv, op=op)
 
    def AES_encrypt(key, msg, iv): # key, iv -> bytes, msg -> text
       if iv is None:
          raise ValueError("IV must be defined!")
 
       def encrypt(data):
           cipher = AES_build_cipher(key, iv, data)
           v = cipher.update(data)
           v = v + cipher.final()
           del cipher
           v = base64.b64encode(v)
           return v

解密:
def AES_decrypt(key,msg, iv=None):
    # Return the decryption function
     print iv
     def decrypt(data):
         data = base64.b64decode(data)
         cipher = AES_build_cipher(key, iv, 1)
         v = cipher.update(data)
         v = v + cipher.final()
         del cipher
         return v
     return decrypt(msg)
    
加签 验签这里用的是EVP模块(源码地址https://gitlab.com/m2crypto/m2crypto/blob/master/M2Crypto/EVP.py)

加签(私钥)
key = EVP.load_key(file,callback = passwd)
key.reset_context(md=‘sha1‘)
key.sign_init()
key.sign_update(data)
sign = base64.b64encode(key.sign_final())
return sign

解签
#datas是加签数据
#rsa_key是公钥对象
VerifyEVP = EVP.PKey()
VerifyEVP.assign_rsa(rsa_key)
VerifyEVP.verify_init()
VerifyEVP.verify_update(dat) #验证内容
verift = VerifyEVP.verify_final(datas)
#json.dumps(dats,sort_keys = True, separators=(‘,‘,‘:‘)).decode(‘unicode-escape‘).encode(‘utf8‘) 此方法是对数据进行格式处理(去空格 排顺序)

以上 只是本人个人见解,如有错误希望大家指出

时间: 2024-11-08 13:38:03

python 处理java生成的证书流程的相关文章

Java 生成数字证书系列(四)生成数字证书(续)

序 上一篇文章讲到了 Java 生成数字证书,使用的是第三方的组件 BC .这篇文章也是介绍生成数字证书的,只不过与上一篇不同的是,这篇采用的是 KeyStore 的存储方式,导出的证书文件格式为 pfx ,这种格式的证书不仅包含有公钥,还包含有私钥.从证书中就可以读取到私钥. 正文 废话不多说,直接上内容. 与上一篇相同,这里也是使用的 Bouncy Castle 提供的组件,不同的是,这里的证书采用的是公钥加密技术12号标准生成的,简写 PKCS12 .具体内容这里就不再详细的介绍了,有需要

Java 生成数字证书系列(二)剖析数字证书

序 上一篇介绍了一下 CA 证书的几个相关概念,这几个概念还是很重要的,目的在于了解数字证书,以及其的工作原理.这篇文章主要是对 CA 证书进行剖析,讲一下证书的基本构成,这对于生成正确的.可以访问的证书是必不可少的. 构成 废话不多说,直接上内容. 先看一下证书到底是什么,在 Windows 下查看证书时(这里以 cer 为例),界面是这样的. 常规 选项卡里,主要介绍了证书信息,颁发者,和有效日期等. 而 详细信息 选项卡中,包含的信息是比较多的,他们都是以一种 Key - Value 的形

Java 生成数字证书系列(三)生成数字证书

序 前两篇把基本的概念和构成都大致的说了一下,今天这篇文章,主要是讲一下,如何使用 Java 代码生成 CA 证书,以及在生成证书的时候,需要设置的一些属性. 正文 废话不多说,直接上内容. 这里使用的是 Java 的 api ,以及第三方的一个组件 -- BC,(Bouncy Castle).稍微介绍一下 BC,Bouncy Castle 是一种用于 Java 平台的开放源码的轻量级密码术包.它支持大量的密码术算法,并提供 JCE 1.2.1 的实现.而我们将要使用的就是非常常用的非对称算法

Java 生成数字证书系列(一)了解数字证书

序 最近的工作一直围绕着数字证书,对于 CA 证书的了解还是多少有一点的,只不过没有那么深入,现在要用到这方面的东西,显然还是有点欠缺,那么从这篇开始,我就将我自己的学习.工作历程跟大家一同分享,希望对想了解 CA 证书的童鞋有所帮助吧. 很显然,这篇文章大部分都是理论介绍,后续会有相关的一些实例.不喜欢看理论的童鞋,可以直接略过此章,直接看后续的文章. 概要 这篇文章,我主要是想谈一下 CA 证书的工作原理,数字签名,证书格式等几个比较重要的概念.因为在后续的文章中,都会用到这几个概念,而且,

python和java生成随即序列

我指的随机序列就是好像洗牌那样把一个序列打散 看看java的实现 public static int[] random_serial(int limit) { int[] result = new int[limit]; for (int i = 0; i < limit; i++) result[i] = i + 1;//这里可以调整 int w; Random rand = new Random(); for (int i = limit - 1; i > 0; i--) { w = ra

Openssl生成证书流程

Openssl生成证书流程偶然想到在内网配置https,就梳理了下利用openssl与ca生成证书的过程.生成过程分为服务端跟客户端,这里我在一台上测试.一.介绍CA是Certificate Authority的缩写,也就是认证中心.CA的功能有:颁发证书,更新证书,撤销证书和验证证书,相当于公安局的户籍部门.CA证书的作用是作身份认证.数字证书认证过程:×××办理过程: 带上户口本->当地派出所->签发证书->你去领证书 ×××办理过程: 带上户口本(证明你合法)->当地派出所(

openssl生成SSL证书的流程

SSL证书通过在客户端浏览器和Web服务器之间建立一条SSL安全通道(Secure socketlayer(SSL),SSL安全协议主要用来提供对用户和服务器的认证:对传送的数据进行加密和隐藏:确保数据在传送中不被改变,即数据的完整性,现已成为该领域中全球化的标准.由于SSL技术已建立到所有主要的浏览器和WEB服务器程序中,因此,仅需安装服务器证书就可以激活该功能了).即通过它可以激活SSL协议,实现数据信息在客户端和服务器之间的加密传输,可以防止数据信息的泄露.保证了双方传递信息的安全性,而且

openssl生成SSL证书的流程 - moonhillcity的博客 - CSDN博客

1.安装openssl 之后在/usr/lib/ssl目录下(ubuntu系统,用whereis查下ssl目录即可)下找到openssl.cnf,拷贝到工作目录下. 2.工作目录下新建demoCA文件夹,文件夹中新建文件index.txt和serial,再创建一个newcerts的文件夹.在serial里面添加字符01. mkdir demoCA cd demoCA touch ./{serial, index.txt} vi serial 添加01 :wq 生成证书过程:(注意以下过程都在工作

【.NET Core项目实战-统一认证平台】第十二章 授权篇-深入理解JWT生成及验证流程

原文:[.NET Core项目实战-统一认证平台]第十二章 授权篇-深入理解JWT生成及验证流程 [.NET Core项目实战-统一认证平台]开篇及目录索引 上篇文章介绍了基于Ids4密码授权模式,从使用场景.原理分析.自定义帐户体系集成完整的介绍了密码授权模式的内容,并最后给出了三个思考问题,本篇就针对第一个思考问题详细的讲解下Ids4是如何生成access_token的,如何验证access_token的有效性,最后我们使用.net webapi来实现一个外部接口(本来想用JAVA来实现的,