国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【pfx數(shù)字證書制作及操作使用】

這篇具有很好參考價值的文章主要介紹了【pfx數(shù)字證書制作及操作使用】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

.pfx數(shù)字證書制作及操作使用

公司業(yè)務(wù)擴展,要對外開放接口,由于數(shù)據(jù)的安全性,主要是公司是賣數(shù)據(jù)的,需要對接口進行驗證,于是使用數(shù)字證書進行加密解密對數(shù)據(jù)進行處理,防止篡改接口請求,非法獲取數(shù)據(jù),于是整理數(shù)字證書使用與制做。

創(chuàng)建.pfx

在options.config文件中設(shè)置證書有效期

<?xml version="1.0" encoding="utf-8" ?>
<options>
  <outputPath>output</outputPath>
  <start>2022/7/22</start>
  <end>2030/12/31</end>
</options>

CN=名稱(一般填公司名稱)
OU=單位名稱
O=作者名稱
L=地區(qū)
C=國家

CN=*****,OU=技術(shù)部,O=**,L=北京,ST=北京,C=CN

第一步打開CertManager.exe
第二步
1、輸入組織名稱
2、輸入pvk名稱
3、輸入cer名稱
4、完成以上步驟后回車彈出創(chuàng)建私鑰密碼對話框
輸入密碼并且記住,確定之后再次確認密碼
第三步
1、輸入spc名稱
2、輸入密碼
3、輸入pfx名稱
4、輸入密碼并牢記
5、出現(xiàn)succeeded表示成功
以上步驟完成會生成文件 output目錄下

從.pfx文件提取秘鑰

通過這個操作,我們能夠獲得所需的密鑰庫文件zlex.keystore。
在output目錄下按住shift鍵右擊鼠標打開命令行

CMD代碼

keytool -importkeystore -v -srckeystore trumgu.pfx -srcstoretype pkcs12 -srcstorepass trumgu123 -destkeystore trumgu.keystore -deststoretype jks -deststorepass trumgu123
  • **-importkeystore:**導入密鑰庫,通過格式設(shè)定,我們可以將PKCS#12文件轉(zhuǎn)換為JKS格式。
    -v顯示詳情
  • **-srckeystore:**源密鑰庫,這里是trumgu.pfx
  • **-srcstoretype:**源密鑰庫格式,這里為pkcs12
  • **-srcstorepass:**源密鑰庫密碼,這里為trumgu123
  • **-destkeystore:**目標密鑰庫,這里為zcs.keystore
  • **-deststoretype:**目標密鑰庫格式,這里為jks,默認值也如此
  • **-deststorepass:**目標密鑰庫密碼,這里為trumgu123

這時,我們已經(jīng)獲得了密鑰庫文件,只要確定對應(yīng)的別名信息,就可以提取公鑰/私鑰,以及數(shù)字證書,進行加密交互了!

keytool -list -keystore trumgu.keystore -storepass trumgu123 -v

  • **-list:**列舉密鑰庫
  • **-keystore:**密鑰庫,這里是trumgu.keystore
  • **-storepass:**密鑰庫密碼,這里是trumgu123
  • **-v:**顯示詳情

記住命令返回的別名
我這里生成的是
pvktmp:48383345-fae0-465f-a4b6-8b2619ddb8a2

導出證書

keytool -exportcert -alias pvktmp:48383345-fae0-465f-a4b6-8b2619ddb8a2 -keystore trumgu.keystore -file trumgu.crt -storepass trumgu123
  • **-exportcert:**導出證書
  • **-alias:**別名,這里是1
  • **-keystore:**密鑰庫,這里是trumgu.keystore
  • **-file:**證書文件,這里是trumgu.crt
  • **-storepass:**密鑰庫密碼,這里是trumgu123

java開發(fā)加密解密工具類

package com.trumgu.authorization;

import javax.crypto.Cipher;
import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.Signature;
import java.security.cert.Certificate;
import java.security.cert.CertificateFactory;
import java.security.cert.X509Certificate;
import java.util.Date;

public class CertificateCoder {
    /**
     * Java密鑰庫(Java Key Store,JKS)KEY_STORE
     */
    public static final String KEY_STORE = "JKS";

    public static final String X509 = "X.509";

    /**
     * 由 KeyStore獲得私鑰
     *
     * @param keyStorePath
     * @param keyStorePassword
     * @param alias
     * @param aliasPassword
     * @return
     * @throws Exception
     */
    private static PrivateKey getPrivateKey(String keyStorePath,
                                            String keyStorePassword, String alias, String aliasPassword)
            throws Exception {
        KeyStore ks = getKeyStore(keyStorePath, keyStorePassword);
        PrivateKey key = (PrivateKey) ks.getKey(alias,
                aliasPassword.toCharArray());
        return key;
    }

    /**
     * 由 Certificate獲得公鑰
     *
     * @param certificatePath
     * @return
     * @throws Exception
     */
    private static PublicKey getPublicKey(String certificatePath)
            throws Exception {
        Certificate certificate = getCertificate(certificatePath);
        PublicKey key = certificate.getPublicKey();
        return key;
    }

    /**
     * 獲得Certificate
     *
     * @param certificatePath
     * @return
     * @throws Exception
     */
    private static Certificate getCertificate(String certificatePath)
            throws Exception {
        CertificateFactory certificateFactory = CertificateFactory
                .getInstance(X509);
        FileInputStream in = new FileInputStream(certificatePath);

        Certificate certificate = certificateFactory.generateCertificate(in);
        in.close();

        return certificate;
    }

    /**
     * 獲得Certificate
     *
     * @param keyStorePath
     * @param keyStorePassword
     * @param alias
     * @return
     * @throws Exception
     */
    private static Certificate getCertificate(String keyStorePath,
                                              String keyStorePassword, String alias) throws Exception {
        KeyStore ks = getKeyStore(keyStorePath, keyStorePassword);
        Certificate certificate = ks.getCertificate(alias);

        return certificate;
    }

    /**
     * 獲得KeyStore
     *
     * @param keyStorePath
     * @param password
     * @return
     * @throws Exception
     */
    private static KeyStore getKeyStore(String keyStorePath, String password)
            throws Exception {
        FileInputStream is = new FileInputStream(keyStorePath);
        KeyStore ks = KeyStore.getInstance(KEY_STORE);
        ks.load(is, password.toCharArray());
        is.close();
        return ks;
    }

    /**
     * 私鑰加密
     *
     * @param data
     * @param keyStorePath
     * @param keyStorePassword
     * @param alias
     * @param aliasPassword
     * @return
     * @throws Exception
     */
    public static byte[] encryptByPrivateKey(byte[] data, String keyStorePath,
                                             String keyStorePassword, String alias, String aliasPassword)
            throws Exception {
        // 取得私鑰
        PrivateKey privateKey = getPrivateKey(keyStorePath, keyStorePassword,
                alias, aliasPassword);

        // 對數(shù)據(jù)加密
        Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);

        return cipher.doFinal(data);

    }

    /**
     * 私鑰解密
     *
     * @param data
     * @param keyStorePath
     * @param alias
     * @param keyStorePassword
     * @param aliasPassword
     * @return
     * @throws Exception
     */
    public static byte[] decryptByPrivateKey(byte[] data, String keyStorePath,
                                             String alias, String keyStorePassword, String aliasPassword)
            throws Exception {
        // 取得私鑰
        PrivateKey privateKey = getPrivateKey(keyStorePath, keyStorePassword,
                alias, aliasPassword);

        // 對數(shù)據(jù)加密
        Cipher cipher = Cipher.getInstance(privateKey.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, privateKey);

        return cipher.doFinal(data);

    }

    /**
     * 公鑰加密
     *
     * @param data
     * @param certificatePath
     * @return
     * @throws Exception
     */
    public static byte[] encryptByPublicKey(byte[] data, String certificatePath)
            throws Exception {

        // 取得公鑰
        PublicKey publicKey = getPublicKey(certificatePath);
        // 對數(shù)據(jù)加密
        Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);

        return cipher.doFinal(data);

    }

    /**
     * 公鑰解密
     *
     * @param data
     * @param certificatePath
     * @return
     * @throws Exception
     */
    public static byte[] decryptByPublicKey(byte[] data, String certificatePath)
            throws Exception {
        // 取得公鑰
        PublicKey publicKey = getPublicKey(certificatePath);

        // 對數(shù)據(jù)加密
        Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, publicKey);

        return cipher.doFinal(data);

    }

    /**
     * 驗證Certificate
     *
     * @param certificatePath
     * @return
     */
    public static boolean verifyCertificate(String certificatePath) {
        return verifyCertificate(new Date(), certificatePath);
    }

    /**
     * 驗證Certificate是否過期或無效
     *
     * @param date
     * @param certificatePath
     * @return
     */
    public static boolean verifyCertificate(Date date, String certificatePath) {
        boolean status = true;
        try {
            // 取得證書
            Certificate certificate = getCertificate(certificatePath);
            // 驗證證書是否過期或無效
            status = verifyCertificate(date, certificate);
        } catch (Exception e) {
            status = false;
        }
        return status;
    }

    /**
     * 驗證證書是否過期或無效
     *
     * @param date
     * @param certificate
     * @return
     */
    private static boolean verifyCertificate(Date date, Certificate certificate) {
        boolean status = true;
        try {
            X509Certificate x509Certificate = (X509Certificate) certificate;
            x509Certificate.checkValidity(date);
        } catch (Exception e) {
            status = false;
        }
        return status;
    }

    /**
     * 簽名
     *
     * @param keyStorePath
     * @param alias
     * @param keyStorePassword
     * @param aliasPassword
     * @return
     * @throws Exception
     */
    public static byte[] sign(byte[] sign, String keyStorePath, String alias,
                              String keyStorePassword, String aliasPassword) throws Exception {
        // 獲得證書
        X509Certificate x509Certificate = (X509Certificate) getCertificate(
                keyStorePath, keyStorePassword, alias);

        // 取得私鑰
        PrivateKey privateKey = getPrivateKey(keyStorePath, keyStorePassword,
                alias, aliasPassword);

        // 構(gòu)建簽名
        Signature signature = Signature.getInstance(x509Certificate
                .getSigAlgName());
        signature.initSign(privateKey);
        signature.update(sign);
        return signature.sign();
    }

    /**
     * 驗證簽名
     *
     * @param data
     * @param sign
     * @param certificatePath
     * @return
     * @throws Exception
     */
    public static boolean verify(byte[] data, byte[] sign,
                                 String certificatePath) throws Exception {
        // 獲得證書
        X509Certificate x509Certificate = (X509Certificate) getCertificate(certificatePath);
        // 獲得公鑰
        PublicKey publicKey = x509Certificate.getPublicKey();
        // 構(gòu)建簽名
        Signature signature = Signature.getInstance(x509Certificate
                .getSigAlgName());
        signature.initVerify(publicKey);
        signature.update(data);

        return signature.verify(sign);

    }

    /**
     * 驗證Certificate
     *
     * @param keyStorePath
     * @param keyStorePassword
     * @param alias
     * @return
     */
    public static boolean verifyCertificate(Date date, String keyStorePath,
                                            String keyStorePassword, String alias) {
        boolean status = true;
        try {
            Certificate certificate = getCertificate(keyStorePath,
                    keyStorePassword, alias);
            status = verifyCertificate(date, certificate);
        } catch (Exception e) {
            status = false;
        }
        return status;
    }

    /**
     * 驗證Certificate
     *
     * @param keyStorePath
     * @param keyStorePassword
     * @param alias
     * @return
     */
    public static boolean verifyCertificate(String keyStorePath,
                                            String keyStorePassword, String alias) {
        return verifyCertificate(new Date(), keyStorePath, keyStorePassword,
                alias);
    }


}

gateway加密認證

*.crt : 證書
*.keystore 秘鑰庫文件
keyStorePassword: 密鑰庫密碼
aliasPassword: 別名密碼
alias: 別名
session 身份識別碼
appkey 應(yīng)用識別碼
appName :名稱與證書秘鑰庫名稱一致
timeStamp :時間戳
sign :數(shù)字簽名

需簽名字符串
inputStr = appkey=appKeyValue&timeStamp=timeStampValue&參數(shù)key=value;
參數(shù)的key按accsii排序
post請求
參數(shù)為JSON轉(zhuǎn)Map后排序再拼接
參數(shù)為數(shù)組直接拼接
參數(shù)為RequestParam 與GET相同
請求為文件上傳忽略參數(shù)簽名

GET請求按accsii排序后拼接

加密獲得sign文章來源地址http://www.zghlxwxcb.cn/news/detail-658173.html

    private String certificatePath = "C:\\Users\\EDY\\Desktop\\pfx證書制作工具\\output\\trumgu.crt";
    private String keyStorePath = "C:\\Users\\EDY\\Desktop\\pfx證書制作工具\\output\\trumgu.keystore";
    private String keyStorePassword = "trumgu123";
    private String aliasPassword = "trumgu123";
    private String alias = "pvktmp:48383345-fae0-465f-a4b6-8b2619ddb8a2";
    byte[] data = inputStr.getBytes();

    byte[] encodedData = CertificateCoderUtils.encryptByPrivateKey(data,
                keyStorePath, keyStorePassword, alias, aliasPassword);


    byte[] decodedData = CertificateCoderUtils.decryptByPublicKey(encodedData,
                certificatePath);

    String outputStr = new String(decodedData);
    System.err.println("加密前: " + inputStr + "\n\r" + "解密后: " + outputStr);
    assertEquals(inputStr, outputStr);

    System.err.println("私鑰簽名——公鑰驗證簽名");
    // 產(chǎn)生簽名
    byte[] signByte = CertificateCoderUtils.sign(encodedData, keyStorePath, alias,
    keyStorePassword, aliasPassword);
    String sign = Hex.encodeHexString(signByte);
    System.err.println("簽名:\r" + sign);

到了這里,關(guān)于【pfx數(shù)字證書制作及操作使用】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • SSL數(shù)字證書服務(wù)

    SSL數(shù)字證書服務(wù)

    SSL/TLS 證書允許Web瀏覽器使用安全套接字層/傳輸層安全 (SSL/TLS) 協(xié)議識別并建立與網(wǎng)站的加密網(wǎng)絡(luò)連接。 SSL數(shù)字證書主要功能 SSL證書在瀏覽器或用戶計算機與服務(wù)器或網(wǎng)站之間建立加密連接。這種連接可以保護傳輸中的敏感數(shù)據(jù)免遭非授權(quán)方的攔截,從而使在線交易能夠完全

    2024年02月06日
    瀏覽(27)
  • 安全算法(三)消息驗證碼、數(shù)字簽名和數(shù)字證書

    安全算法(三)消息驗證碼、數(shù)字簽名和數(shù)字證書

    主要介紹了消息驗證碼、數(shù)字簽名和數(shù)字證書三種加密方式。 消息認證碼 消息認證碼可以實現(xiàn)“認證”和“檢測篡改”這兩個功能。密文的內(nèi)容在傳輸過程中可能會被篡改,這會導致解密后的內(nèi)容發(fā)生變化,從而產(chǎn)生誤會。消息認證碼就是可以預防這種情況發(fā)生的機制。 假

    2024年01月22日
    瀏覽(19)
  • 非對稱加密與數(shù)字證書

    非對稱加密與數(shù)字證書

    非對稱加密,是指不能從加密密鑰推算出解密密鑰。加密密鑰不需要保密,可以公開,稱之為 公鑰 ,只需要保守解密秘鑰稱之為 私鑰 。公鑰和私鑰是 成對 的。常見的非對稱加密算法有:RSA、Elgamal、背包算法、Rabin、D-H、ECC。 所謂“成對”的含義:如果用公開密鑰對數(shù)據(jù)進

    2024年02月09日
    瀏覽(19)
  • 安裝軟件和驅(qū)動程序需要微軟數(shù)字簽名無法安裝?數(shù)字簽名和數(shù)字證書區(qū)別

    安裝軟件和驅(qū)動程序需要微軟數(shù)字簽名無法安裝?數(shù)字簽名和數(shù)字證書區(qū)別

    1.安裝軟件和驅(qū)動程序需要微軟數(shù)字簽名無法安裝 windows安裝exe安裝包時: 1.1 ?解決方法: 1.2 ? ? ? ? ? 這個問題需要安裝驅(qū)動補丁進行更新驅(qū)動操作,如:Windows6.1-sha2補丁.msu 1.3 ? ? ? ? ? 這種屬于簽名問題,解決方法: 1..進入“控制面板”,查看方式為大圖標,點擊“

    2024年02月05日
    瀏覽(28)
  • 區(qū)塊鏈之加解密算法&數(shù)字證書

    區(qū)塊鏈之加解密算法&數(shù)字證書

    目錄 一.加解密算法 數(shù)字簽名 對稱加密 DES(Data EncryptionStandard) 3DES(Triple DES) AES(Advanced EncryptionStandard) RSA加密法 DSA(Digital SignatureAlgorithm) ECC(Elliptic CurvesCryptography) 非對稱加密 簽名與加密過程 非對稱加密的應(yīng)用 對稱加密與非對稱加密的結(jié)合 二.數(shù)字證書 圖解 加密簡單而言就是通

    2024年01月19日
    瀏覽(16)
  • Https、CA證書、數(shù)字簽名

    Https、CA證書、數(shù)字簽名

    Https Http協(xié)議 Http協(xié)議是目前應(yīng)用比較多應(yīng)用層協(xié)議,瀏覽器對于Http協(xié)議已經(jīng)實現(xiàn)。Http協(xié)議基本的構(gòu)成部分有 請求行 : 請求報文的第一行 請求頭 : 從第二行開始為請求頭內(nèi)容的開始部分。每一個請求頭都是由K-V鍵值對組成。 請求體: 請求頭完成后以空行結(jié)束、從空行開始

    2024年02月12日
    瀏覽(20)
  • 阿里云ssl免費數(shù)字證書快過期 如何更換

    阿里云ssl免費數(shù)字證書快過期 如何更換

    數(shù)字證書管理服務(wù)-ssl證書 此處記錄本地的下載路徑 /Users/dorsey/Downloads/10791167_lzzabc.cn_nginx/lzzabc.cn.pem? /Users/dorsey/Downloads/10791167_lzzabc.cn_nginx/lzzabc.cn.key 找到ssl存放位置? ? /www/https/lzzabc.cn.pem??/www/https/lzzabc.cn.key ?mv admin.lzzabc.cn.pem admin2.lzzabc.cn.pem 命令為? scp 本地用戶名@IP地址

    2024年02月14日
    瀏覽(24)
  • 密碼學基礎(chǔ)(三)——數(shù)字簽名與證書

    密碼學基礎(chǔ)(三)——數(shù)字簽名與證書

    數(shù)字簽名:又叫公鑰數(shù)字簽名,或者電子印章。 數(shù)字信息社會用于取代傳統(tǒng)社會手寫簽名的一種公鑰加密領(lǐng)域的技術(shù)實現(xiàn)。 數(shù)字簽名其實就是非對稱加密的私鑰加密,公鑰解密的過程。 數(shù)字證書用來證明公鑰擁有者的身份,驗證數(shù)據(jù)來源,驗證數(shù)據(jù)是否被修改。 數(shù)字證書中

    2024年02月16日
    瀏覽(23)
  • 數(shù)字證書的相關(guān)專業(yè)名詞(中)---根證書和CRL,以及java中CRL的獲取和驗證方法

    數(shù)字證書的相關(guān)專業(yè)名詞(中)---根證書和CRL,以及java中CRL的獲取和驗證方法

    上篇文章我們主要了解了PKI中的數(shù)字證書和PKCS,這篇文章我們主要了解一下根證書,以及OCSP和CRL。 在公鑰基礎(chǔ)設(shè)施(PKI)中,根證書是 整個數(shù)字證書體系的最高級別證書 。根證書由受信任的第三方機構(gòu)(CA)頒發(fā),用于驗證其他證書以及建立信任鏈。 當您收到一個數(shù)字證

    2024年02月05日
    瀏覽(15)
  • 數(shù)字藏品平臺的企業(yè)需要準備哪些資質(zhì)證書?

    數(shù)字藏品平臺的企業(yè)需要準備哪些資質(zhì)證書?

    NFT數(shù)字藏品平臺在我國經(jīng)營需要哪些資質(zhì)牌照呢? 龍翊信安幫大家整理了以下資質(zhì)牌照,數(shù)字藏品平臺需要對照自己的業(yè)務(wù)類型來決定應(yīng)對具備哪些牌照。 (一) 區(qū)塊鏈信息服務(wù)備案 NFT的上鏈、交易等都離不開區(qū)塊鏈,根據(jù)《區(qū)塊鏈信息服務(wù)管理規(guī)定》規(guī)定,需通過國家互聯(lián)

    2023年04月09日
    瀏覽(17)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包