热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

第一章P12类型证书导出证书、私钥

P12导出证书证书、私钥一、简言今天与客户做微信支付开发支持,然后给到了相应的商户号、apikey、公众号、p12证书等等。但是客户那边不要P12证书,非要pem证书。所以这边要进

P12导出证书证书、私钥

一、简言

今天与客户做微信支付开发支持,然后给到了相应的商户号、apikey、公众号、p12证书等等。但是客户那边不要P12证书,非要pem证书。所以这边要进行P12证书导出公钥、私钥操作。
p12证书全称是PKCS#12(Public-Key Cryptography Standards:公钥加密标准,PKCS#12是一种交换数字证书的加密标准,用来描述个人身份信息。如:用户公钥、私钥、证书等。
微信的p12证书里包含了公钥、私钥、证书、序列号。提取这些信息的时候需要输入密码,这个`密码默认是商户号`(这个是重点,这边由于证书时间长,已经不记得密码,查了文档才知道密码默认是商户号)。

二、Linxu具体操作

#1.查看所有信息
[root@test01 ~]# openssl pkcs12 -info -in apiclient_cert_shanxi_app.p12 -nodes
Enter Import Password:
MAC Iteration 1
MAC verified OK #表示密码是正确的
#2.导出证书
[root@test01 ~]# openssl pkcs12 -in apiclient_cert_shanxi_app.p12 -out cert.pem -nokeys
Enter Import Password:
MAC verified OK
#3.导出秘钥
[root@test01 ~]# openssl pkcs12 -in apiclient_cert_shanxi_app.p12 -out private_key.pem -nodes -nocerts
Enter Import Password:
MAC verified OK
#4.查看是否生成证书和密钥
[root@test01 ~]# ll
total 44
-rw-r--r-- 1 root root 2718 Jun 18 2021 apiclient_cert_shanxi_app.p12
-rw-r--r-- 1 root root 1923 Jul 15 15:31 cert.pem
-rw-r--r-- 1 root root 1865 Jul 15 15:32 private_key.pem
#5.查看证书序列号
[root@test01 ~]# openssl x509 -in cert.pem -noout -serial
至此操作结束,把相应的证书和密钥发给开发就好啦。

三、Python具体操作

# !/usr/bin/env python3
# -*- coding:utf-8 -*-
"""
@Version: 3.9
@Author: Jin Hui
@File: p12.py
@Time: 2022-07-15 12:55
"""
from OpenSSL import crypto
# open it, using password. Supply/read your own from stdin.
p12 = crypto.load_pkcs12(open('C:/Users/97408/Desktop/apiclient_cert_shanxi_app.p12', "rb").read(),
'*********'.encode('ascii'))
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))
# PEM formatted private key
private_key = crypto.dump_privatekey(crypto.FILETYPE_PEM, p12.get_privatekey())
with open("private_key.pem", mode='wb') as f1:
f1.write(private_key)
# PEM formatted certificate
certificate = crypto.dump_certificate(crypto.FILETYPE_PEM, p12.get_certificate())
with open("cert.pem", mode='wb') as f2:
f2.write(certificate)

运行完成后看到多出两个文件证书和密钥。

image



推荐阅读
  • SpringBoot uri统一权限管理的实现方法及步骤详解
    本文详细介绍了SpringBoot中实现uri统一权限管理的方法,包括表结构定义、自动统计URI并自动删除脏数据、程序启动加载等步骤。通过该方法可以提高系统的安全性,实现对系统任意接口的权限拦截验证。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了Web学习历程记录中关于Tomcat的基本概念和配置。首先解释了Web静态Web资源和动态Web资源的概念,以及C/S架构和B/S架构的区别。然后介绍了常见的Web服务器,包括Weblogic、WebSphere和Tomcat。接着详细讲解了Tomcat的虚拟主机、web应用和虚拟路径映射的概念和配置过程。最后简要介绍了http协议的作用。本文内容详实,适合初学者了解Tomcat的基础知识。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在rhel5.5操作系统下搭建网关+LAMP+postfix+dhcp的步骤和配置方法。通过配置dhcp自动分配ip、实现外网访问公司网站、内网收发邮件、内网上网以及SNAT转换等功能。详细介绍了安装dhcp和配置相关文件的步骤,并提供了相关的命令和配置示例。 ... [详细]
  • 散列表的查找过程及优势与劣势
    散列表是一种存储和查找方法,通过散列函数计算记录的散列地址来存储和访问记录。与线性表、树、图等结构不同的是,散列技术的记录之间不存在逻辑关系,只与关键字有关联。散列表的优势在于快速的查找速度,但也存在劣势。散列表最适合解决查找与给问题。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 如何去除Win7快捷方式的箭头
    本文介绍了如何去除Win7快捷方式的箭头的方法,通过生成一个透明的ico图标并将其命名为Empty.ico,将图标复制到windows目录下,并导入注册表,即可去除箭头。这样做可以改善默认快捷方式的外观,提升桌面整洁度。 ... [详细]
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • 本文介绍了UVALive6575题目Odd and Even Zeroes的解法,使用了数位dp和找规律的方法。阶乘的定义和性质被介绍,并给出了一些例子。其中,部分阶乘的尾零个数为奇数,部分为偶数。 ... [详细]
  • CF:3D City Model(小思维)问题解析和代码实现
    本文通过解析CF:3D City Model问题,介绍了问题的背景和要求,并给出了相应的代码实现。该问题涉及到在一个矩形的网格上建造城市的情景,每个网格单元可以作为建筑的基础,建筑由多个立方体叠加而成。文章详细讲解了问题的解决思路,并给出了相应的代码实现供读者参考。 ... [详细]
  • 有没有一种方法可以在不继承UIAlertController的子类或不涉及UIAlertActions的情况下 ... [详细]
  • 如何在服务器主机上实现文件共享的方法和工具
    本文介绍了在服务器主机上实现文件共享的方法和工具,包括Linux主机和Windows主机的文件传输方式,Web运维和FTP/SFTP客户端运维两种方式,以及使用WinSCP工具将文件上传至Linux云服务器的操作方法。此外,还介绍了在迁移过程中需要安装迁移Agent并输入目的端服务器所在华为云的AK/SK,以及主机迁移服务会收集的源端服务器信息。 ... [详细]
author-avatar
钟孝健V
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有