概述 数字证书 互联网通讯中标志通讯各方身份信息的一串数字,提供了一种在Internet上验证通信实体身份的方式,数字证书不是数字身份证,而是身份认证机构盖在数字身份证上的一个章或印(或者说加在数字身份证上的一个签名)。 数字证书是由权威机构(CA机构),又称为证书授权(CertificateAuthority)中心发行的,人们可以在网上用它来识别对方的身份。 数字证书的应用场景 1、服务器证书,安装于服务器设备上,用来证明服务器的身份和进行通信加密,服务器证书可以用来防止欺诈钓鱼站点。 2、客户端个人企业组织证书,用来身份认证和电子签名的,SSL双向登录,文档签名,代码签名,一些网页上的表单签名。 数字证书相关参考内容: 1、密钥库和证书格式:https:www。toutiao。coma6934192620839109127 2、Nginx配置SSL证书:https:www。toutiao。coma7028371480148754956 3、读取网站申请SSL证书,JKS、PFX、CRT格式:https:www。toutiao。coma7029183711942066695 4、命令制作证书及代码生成证书:https:www。toutiao。comi7042515644935406118?groupid7042515644935406118证书签名 pom。xmldependencygroupIdorg。bouncycastlegroupIdbcprovjdk15to18artifactIdversion1。70versiondependencydependencygroupIdorg。bouncycastlegroupIdbcpkixjdk15to18artifactIdversion1。70versiondependency 签名和验签案例packagecom。what21。netty01。demo01。importcom。what21。netty01。demo01。cert2。KeyStoreUpublicclassCertSignUtilsDemo{publicstaticvoidmain(String〔〕args){读取证书KeyStoreUtils。KeyStoreEntrykeyStoreEntryKeyStoreUtils。readToKeyStoreEntry();证书签名使用证书私钥签名Stringtext被签名的内容;StringsignCtry{签名signContentCertSignUtils。sign(keyStoreEntry。getPrivateKey(),text);}catch(Exceptione){e。printStackTrace();}System。out。println(signContent);证书验签使用证书公钥验签booleanverifyStry{验签verifySignedCertSignUtils。verify(keyStoreEntry。getPublicKey(),text,signContent);}catch(Exceptione){e。printStackTrace();}System。out。println(verifySigned);}}packagecom。what21。netty01。demo01。importjava。security。PrivateKimportjava。security。PublicKimportjava。security。Simportjava。util。Base64;publicclassCertSignUtils{签名paramprivateKeyparamcontentreturnthrowsExceptionpublicstaticStringsign(PrivateKeyprivateKey,Stringcontent)throwsException{用私钥对信息生成数字签名SignaturesignatureSignature。getInstance(SHA384WithRSA);signature。initSign(privateKey);byte〔〕datacontent。getBytes(utf8);signature。update(data);byte〔〕signedDatasignature。sign();returnBase64。getEncoder()。encodeToString(signedData);}验证签名parampublicKeyparamcontentparamsignreturnthrowsExceptionpublicstaticbooleanverify(PublicKeypublicKey,Stringcontent,Stringsign)throwsException{SignaturesignatureSignature。getInstance(SHA384WithRSA);signature。initVerify(publicKey);byte〔〕datacontent。getBytes(utf8);signature。update(data);booleanresultsignature。verify(Base64。getDecoder()。decode(sign));}} JKS格式与PFX格式相互转换packagecom。what21。netty01。demo01。cert3;importjava。io。FileInputSimportjava。io。FileOutputSimportjava。security。Kimportjava。security。KeySimportjava。security。cert。Cimportjava。util。EpublicclassJKSConvertor{证书格式publicstaticfinalStringJKSJKS;publicstaticfinalStringPKCS12PKCS12;paramstorePathparamstorePasswdparampfxPaththrowsExceptionpublicstaticvoidtoPKCS12(StringstorePath,StringstorePasswd,StringpfxPath)throwsException{读取KeyStoreKeyStoreinputKeyStoreKeyStore。getInstance(JKS);FileInputStreaminputStreamnewFileInputStream(storePath);char〔〕nPasswordstorePasswd。toCharArray();inputKeyStore。load(inputStream,nPassword);inputStream。close();创建PKCS12KeyStoreoutputKeyStoreKeyStore。getInstance(PKCS12);outputKeyStore。load(null,storePasswd。toCharArray());EnumerationStringenumStrsinputKeyStore。aliases();while(enumStrs。hasMoreElements()){StringkeyAliasenumStrs。nextElement();if(inputKeyStore。isKeyEntry(keyAlias)){KeykeyinputKeyStore。getKey(keyAlias,nPassword);Certificate〔〕certChaininputKeyStore。getCertificateChain(keyAlias);outputKeyStore。setKeyEntry(keyAlias,key,storePasswd。toCharArray(),certChain);}}输出FileOutputStreamoutputStreamnewFileOutputStream(pfxPath);outputKeyStore。store(outputStream,nPassword);outputStream。close();}paramargsthrowsExceptionpublicstaticvoidmain(String〔〕args)throwsException{JKSConvertor。toPKCS12(D:localhostserver。jks,123456,D:localhostserver。pfx);JKSConvertor。toPKCS12(D:localhostclient1。jks,123456,D:localhostclient1。pfx);}}packagecom。what21。netty01。demo01。cert3;importjava。io。FileInputSimportjava。io。FileOutputSimportjava。security。Kimportjava。security。KeySimportjava。security。cert。Cimportjava。util。EpublicclassPKCS12Convertor{证书格式publicstaticfinalStringJKSJKS;publicstaticfinalStringPKCS12PKCS12;parampfxPathparamstorePasswdparamjksPaththrowsExceptionpublicstaticvoidtoJKS(StringpfxPath,StringstorePasswd,StringjksPath)throwsException{KeyStoreinputKeyStoreKeyStore。getInstance(PKCS12);加载证书FileInputStreaminputStreamnewFileInputStream(pfxPath);P12证书密码char〔〕nPasswordstorePasswd。toCharArray();inputKeyStore。load(inputStream,nPassword);inputStream。close();KeyStoreoutputKeyStoreKeyStore。getInstance(JKS);outputKeyStore。load(null,storePasswd。toCharArray());EnumerationStringenumStrsinputKeyStore。aliases();while(enumStrs。hasMoreElements()){StringkeyAliasenumStrs。nextElement();if(inputKeyStore。isKeyEntry(keyAlias)){KeykeyinputKeyStore。getKey(keyAlias,nPassword);Certificate〔〕certChaininputKeyStore。getCertificateChain(keyAlias);outputKeyStore。setKeyEntry(keyAlias,key,storePasswd。toCharArray(),certChain);}}FileOutputStreamoutputStreamnewFileOutputStream(jksPath);outputKeyStore。store(outputStream,nPassword);outputStream。close();}paramargsthrowsExceptionpublicstaticvoidmain(String〔〕args)throwsException{keytoollistkeystoreD:localhostserver。2。jkskeytoollistrfckeystoreD:localhostserver。2。jksstorepass123456PKCS12Convertor。toJKS(D:localhostserver。pfx,123456,D:localhostserver。2。jks);keytoollistkeystoreD:localhostclient1。2。jkskeytoollistrfckeystoreD:localhostclient1。2。jksstorepass123456PKCS12Convertor。toJKS(D:localhostclient1。pfx,123456,D:localhostclient1。2。jks);}}