范文健康探索娱乐情感热点
投稿投诉
热点动态
科技财经
情感日志
励志美文
娱乐时尚
游戏搞笑
探索旅游
历史星座
健康养生
美丽育儿
范文作文
教案论文
国学影视

Java,数字证书,证书签名和验签,格式转换,JKS格式与PFX转换

  概述
  数字证书
  互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。
  数字证书是由权威机构(CA机构),又称为证书授权(Certificate Authority)中心发行的,人们可以在网上用它来识别对方的身份。
  数字证书的应用场景
  1、服务器证书,安装于服务器设备上,用来证明服务器的身份和进行通信加密,服务器证书可以用来防止欺诈钓鱼站点。
  2、客户端个人/企业组织证书,用来身份认证和电子签名的,SSL双向登录,文档签名,代码签名,一些网页上的表单签名。
  数字证书相关参考内容:
  1、密钥库和证书格式: https://www.toutiao.com/a6934192620839109127/
  2、Nginx配置SSL证书: https://www.toutiao.com/a7028371480148754956/
  3、读取网站申请SSL证书,JKS、PFX、CRT格式: https://www.toutiao.com/a7029183711942066695/
  4、命令制作证书及代码生成证书:https://www.toutiao.com/i7042515644935406118/?group_id=7042515644935406118证书签名
  pom.xml      org.bouncycastle     bcprov-jdk15to18     1.70       org.bouncycastle     bcpkix-jdk15to18     1.70 
  签名和验签案例 package com.what21.netty01.demo01.sign;  import com.what21.netty01.demo01.cert2.KeyStoreUtils;  public class CertSignUtilsDemo {      public static void main(String[] args) {         // 读取证书         KeyStoreUtils.KeyStoreEntry keyStoreEntry = KeyStoreUtils.readToKeyStoreEntry();         // ========================================================================//         // 证书签名====>使用证书私钥签名         // ========================================================================//         String text = "被签名的内容";         String signContent = "";         try {             // 签名             signContent = CertSignUtils.sign(keyStoreEntry.getPrivateKey(), text);         } catch (Exception e) {             e.printStackTrace();         }         System.out.println(signContent);         // ========================================================================//         // 证书验签====>使用证书公钥验签         // ========================================================================//         boolean verifySigned = false;         try {             // 验签             verifySigned = CertSignUtils.verify(keyStoreEntry.getPublicKey(), text, signContent);         } catch (Exception e) {             e.printStackTrace();         }         System.out.println(verifySigned);     }  }package com.what21.netty01.demo01.sign;  import java.security.PrivateKey; import java.security.PublicKey; import java.security.Signature; import java.util.Base64;  public class CertSignUtils {      /**      * 签名      *      * @param privateKey      * @param content      * @return      * @throws Exception      */     public static String sign(PrivateKey privateKey, String content) throws Exception {         // 用私钥对信息生成数字签名         Signature signature = Signature.getInstance("SHA384WithRSA");         signature.initSign(privateKey);         byte[] data = content.getBytes("utf-8");         signature.update(data);         byte[] signedData = signature.sign();         return Base64.getEncoder().encodeToString(signedData);     }       /**      * 验证签名      *      * @param publicKey      * @param content      * @param sign      * @return      * @throws Exception      */     public static boolean verify(PublicKey publicKey, String content, String sign)             throws Exception {         Signature signature = Signature.getInstance("SHA384WithRSA");         signature.initVerify(publicKey);         byte[] data = content.getBytes("utf-8");         signature.update(data);         boolean result = signature.verify(Base64.getDecoder().decode(sign));         return result;     }  }
  JKS格式与PFX格式相互转换 package com.what21.netty01.demo01.cert3;  import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.Key; import java.security.KeyStore; import java.security.cert.Certificate; import java.util.Enumeration;  public class JKSConvertor {      // 证书格式     public static final String JKS = "JKS";     public static final String PKCS12 = "PKCS12";      /**      * @param storePath      * @param storePasswd      * @param pfxPath      * @throws Exception      */     public static void toPKCS12(String storePath, String storePasswd, String pfxPath) throws Exception {         // 读取KeyStore         KeyStore inputKeyStore = KeyStore.getInstance(JKS);         FileInputStream inputStream = new FileInputStream(storePath);         char[] nPassword = storePasswd.toCharArray();         inputKeyStore.load(inputStream, nPassword);         inputStream.close();         // 创建PKCS12         KeyStore outputKeyStore = KeyStore.getInstance(PKCS12);         outputKeyStore.load(null, storePasswd.toCharArray());         Enumeration enumStrs = inputKeyStore.aliases();         while (enumStrs.hasMoreElements()) {             String keyAlias = enumStrs.nextElement();             if (inputKeyStore.isKeyEntry(keyAlias)) {                 Key key = inputKeyStore.getKey(keyAlias, nPassword);                 Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);                 outputKeyStore.setKeyEntry(keyAlias, key, storePasswd.toCharArray(), certChain);             }         }         // 输出         FileOutputStream outputStream = new FileOutputStream(pfxPath);         outputKeyStore.store(outputStream, nPassword);         outputStream.close();     }      /**      * @param args      * @throws Exception      */     public static void main(String[] args) throws Exception {         JKSConvertor.toPKCS12("D://localhost_server.jks", "123456", "D://localhost_server.pfx");         JKSConvertor.toPKCS12("D:/localhost_client1.jks", "123456", "D:/localhost_client1.pfx");     }  }package com.what21.netty01.demo01.cert3;  import java.io.FileInputStream; import java.io.FileOutputStream; import java.security.Key; import java.security.KeyStore; import java.security.cert.Certificate; import java.util.Enumeration;  public class PKCS12Convertor {      // 证书格式     public static final String JKS = "JKS";     public static final String PKCS12 = "PKCS12";      /**      * @param pfxPath      * @param storePasswd      * @param jksPath      * @throws Exception      */     public static void toJKS(String pfxPath, String storePasswd, String jksPath) throws Exception {         KeyStore inputKeyStore = KeyStore.getInstance(PKCS12);         // 加载证书         FileInputStream inputStream = new FileInputStream(pfxPath);         // P12证书密码         char[] nPassword = storePasswd.toCharArray();         inputKeyStore.load(inputStream, nPassword);         inputStream.close();         KeyStore outputKeyStore = KeyStore.getInstance(JKS);         outputKeyStore.load(null, storePasswd.toCharArray());         Enumeration enumStrs = inputKeyStore.aliases();         while (enumStrs.hasMoreElements()) {             String keyAlias = enumStrs.nextElement();             if (inputKeyStore.isKeyEntry(keyAlias)) {                 Key key = inputKeyStore.getKey(keyAlias, nPassword);                 Certificate[] certChain = inputKeyStore.getCertificateChain(keyAlias);                 outputKeyStore.setKeyEntry(keyAlias, key, storePasswd.toCharArray(), certChain);             }         }         FileOutputStream outputStream = new FileOutputStream(jksPath);         outputKeyStore.store(outputStream, nPassword);         outputStream.close();     }      /**      * @param args      * @throws Exception      */     public static void main(String[] args) throws Exception {         // keytool -list -keystore D://localhost_server.2.jks         // keytool -list -rfc -keystore D://localhost_server.2.jks -storepass 123456         PKCS12Convertor.toJKS("D://localhost_server.pfx", "123456", "D://localhost_server.2.jks");         // keytool -list -keystore D://localhost_client1.2.jks         // keytool -list -rfc -keystore D://localhost_client1.2.jks -storepass 123456         PKCS12Convertor.toJKS("D:/localhost_client1.pfx", "123456", "D:/localhost_client1.2.jks");     }  }

每周行情9。28来势汹汹,全价位段手机推荐欢迎收看每周更新的手机推荐栏目。新机潮到来,大半个月间,10多款新机来势汹汹。但其实对我们的推荐列表并没有太大的影响,期待它们在双十一能绝地反击最近的新机,除了iPhone13系列用户反馈iPadmini果冻屏问题迎来回应,苹果LCD屏正常现象相信有关注数码圈信息的小伙伴都知道,近期关于用户反馈苹果iPadmini6存在果冻屏的问题,在网上闹得沸沸扬扬,吸引众多网友围观与讨论。这里先给大家科普一下何为果冻屏,简单的说,就高档车车顶上大部分都有翘起的小尾巴,好奇它的作用吗?细心的车主朋友都会发现啊,有些汽车的顶部会有一个鲨鱼鳍模样的东东,它是干什么的呢?有什么作用呢?汽车顶上的鲨鱼鳍是干啥的?车顶的鲨鱼鳍,其实就是汽车的天线。鲨鱼鳍天线外观大方功能齐人类如何应对人工智能带来的心理威胁各种形式以及不同形态的机器尤其是人工智能以虚体(如算法)或实体(如机器人)的方式不断渗入人类社会生活。人类对它的关心程度远远超过其他技术革新。我们讨论着人工智能会不会有一颗类似人类憋了半年终于放大招了!荣耀拿质量说话,网友苦苦等待值得了对手机界而言,新荣耀算得上是一个熟悉而又陌生的存在。在荣耀离开华为之后,其发展受到广泛关注。在过去,每一代的荣耀手机都能掀起用户的抢购风潮,并在很大程度上引领手机行业的发展走向。但百度投资北京缪客科技有限公司,黄油相机APP系后者旗下产品企查查APP显示,6月3日,北京缪客科技有限公司发生工商变更,多名自然人股东退出,新增股东北京百度网讯科技有限公司。企查查显示,北京缪客科技有限公司成立于2014年11月,注册资本华为Mate50Pro概念机,屏下镜头一亿像素麒麟9010,你喜欢吗?华为的鸿蒙系统已经提出了挺长一段时间了,目前也已经在手机端试用,从网友反馈的情况来看,搭载鸿蒙系统的手机体验不输之前的EMUI系统,照此看来,华为的鸿蒙系统发展一片光明。这真是一个Win10最大革新将至!新一代Windows系统发布时间官宣在微软Build2021开发者大会上,微软CEO纳德拉证实,微软正在开发下一代Windows系统。实际上在此之前,微软Surface之父帕诺斯帕内就在微软以企业为重点的Ignite突发!王者荣耀被告上法庭,腾讯摊上事了?王者荣耀可谓是一款国民级的现象手游,腾讯控股(00700)也是依靠其赚的盆满钵满。不过,一直以来围绕在它身上的争议很多。其中最被人诟病的就是孩子的成瘾性问题。王者荣耀突然被起诉在6教培行业风云突变,腾讯入局少儿编程领域6月1日,北京市教委印发北京市教育委员会关于检查校外培训机构发现问题的通报。通报指出,5月28日至5月30日,市级双减工作专班组织检查组对西城区朝阳区海淀区部分前期摸排掌握的无证学全球Top1000计算机科学家h指数公布,中国顶尖计算机科学家人数进入前三整理Carol出品CSDN(IDCSDNnews)近日,Guide2Research公布了2021年世界顶尖1000名计算机科学家排名。美国科学家登榜数量达614名,稳居上榜科学家
22年2月电脑DIY配置方案主观推荐30套方案我个人所创作DIY配置单,比较主观,所写配件只是基础,各位朋友可在这基础上选择更好的配件进行升级,也可直接简单照搬使用。你们自己DIY装机还是去买整机,都可参考我写的配置单进行比价对于初学者而言亿择云库是个不错的选择身为一名站长,时常都会有遇到新手来问问题,最近就有许多人加我,有些是问关于网上亿择云库的,有问的是适不适合网络小白?我已经是一名宝妈能做不?有什么门槛吗?等疑问,所以它的受众人群有GovsJavavsC语法对比1。说明最近在学习Go,在学习的过程中为了加快学习速度将新知识添加到已有知识体系架构中,总是会拿Go和其他开发语言进行对比,最终进行总结,于是就有了这篇文章。对于每一个知识点结束时你的上网行为,被老板监控了吗?近日,某互联网企业被曝安装了行为感知系统,可以监控员工浏览招聘网站投递简历等上网行为。网传图片显示,在行为感知系统内,可查看员工详细的离职倾向,某鞠姓员工访问求职网站23次,投递简MQ幂等去重有哪些通用的解决方案?MQ幂等去重有哪些通用的解决方案?前言简单的消息去重解决方案并发重复消息ExactlyOnce基于关系数据库事务插入消息表更复杂的业务场景拆解消息执行过程更通用的解决方案更灵活的消1吨值30亿美元,100吨够全球用1年!嫦娥五号带回月球氦3根据自然天文学(NatureAstronomy)杂志刊载的一项新研究1,来自中国科学院的科学家对嫦娥五号带回的月球样品进行了深入分析,填补了50年来的一项研究空白,这是当年美国阿波微信拥有超过12亿用户,却仅排全球第三,第一和第二分别是谁?社交已经成为了人们生活当中必不可少的娱乐之一,无论是聊天交友还是商务办公,都会有人员之间的联系,而实现异地交流的聊天软件不计其数,在我国最为人所熟知的便是微信了。尽管QQ的使用者也索罗斯四季度豪掷百亿重仓特斯拉神秘死敌Rivian根据索罗斯基金管理公司提交给美国证券交易委员会(SEC)的13F文件,这家由亿万富翁乔治索罗斯管理的基金公司于去年第四季度新购近两千万股Rivian,持仓市值约20。57亿美元,合工信部回应手机资费问题6年流量费降幅超95来源人民网原创稿人民网领导留言板截图。人民网北京2月15日电(申佳平)近日,针对人民网领导留言板网民关于建议进一步降低全国手机卡收费标准的留言,工信部回复称,我国已放开所有电信业务携程将推混合办公模式允许员工每周三和周五在家远程办公2月15日,元宵佳节当天,携程集团董事局主席梁建章在接受媒体采访时透露,携程将于3月份在公司推行32混合办公模式,允许员工每周三和周五在家远程办公。届时,全公司近三万名员工将实行混在。Net7源码中bool代码优化起因代码总是从简单到复杂,从易读到晦涩,有的是业务逻辑复杂导致代码也复杂,有的是为了性能优化,导致代码不那么易读易懂了。这里主要是看到最近。Netbool类型源码变化。Stream