none
憑證輸出後檔案大小不對等 RRS feed

  • 一般討論

  • hi all.

    有個憑證的問題想請教.

    我使用兩隻程式,一支將憑證讀入X509Certificate2,並輸出base64字串,另一支得到base64字串以後,讀入X509Certificate2並存成憑證.

    但在這過程中發現,原始憑證為4k,但輸出後僅剩2~3k,想請教為何?

    困擾很久,如能解答不勝感激!

         static string base64(X509ContentType type )
            {
                    X509Certificate2 mykey = new X509Certificate2();
                    mykey.Import(@"cert.pfx", X509KeyStorageFlags.Exportable);
                    Console.WriteLine("憑證匯入:"+type.ToString());
                    return Convert.ToBase64String(mykey.Export(type), Base64FormattingOptions.None);
              }

    另一支則是

                    var cert = new X509Certificate2(Encoding.UTF8.GetBytes(base64), password);
                    byte[] data = cert.Export(X509ContentType.Pfx);
                    File.WriteAllBytes("copy-cert.pfx", data);


    2016年11月1日 上午 06:18

所有回覆

  • 你有確認過 mykey.Export(type) 和 cert.Export(X509ContentType.Pfx) 輸出的位元組是一樣的嗎?

    cert.Export() 匯出的應該不是 PFX,因為文件上寫說:

    contentType參數接受下列值的X509ContentType列舉型別: Cert SerializedCert,和Pkcs12CryptographicException擲回。

    沒有擲出例外是有點奇怪...


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure



    2016年11月1日 上午 08:01
    版主
  • 謝謝小朱大的回覆.

    首先我有確認過一樣.後來找到網路上有段code去列出憑證的內容,發現原始的憑證含有私鑰,輸出後僅輸出公鑰,所以檔案大小銳減.

    這部分還在思考怎麼處理.

    感謝~

    另外X509Certificate2輸出選項還蠻多的.以下給各位參考.

      public enum X509ContentType
        {
            //
            // 摘要:
            //     未知的 X.509 憑證。
            Unknown = 0,
            //
            // 摘要:
            //     單一 X.509 憑證。
            Cert = 1,
            //
            // 摘要:
            //     單一序列化的 X.509 憑證。
            SerializedCert = 2,
            //
            // 摘要:
            //     PFX 格式的憑證。Pfx 值和 Pkcs12 值相同。
            Pfx = 3,
            //
            // 摘要:
            //     PKCS #12 格式的憑證。Pkcs12 值和 Pfx 值相同。
            Pkcs12 = 3,
            //
            // 摘要:
            //     序列化的存放區。
            SerializedStore = 4,
            //
            // 摘要:
            //     PKCS #7 格式的憑證。
            Pkcs7 = 5,
            //
            // 摘要:
            //     Authenticode X.509 憑證。
            Authenticode = 6
        }

    • 已編輯 Felaray 2016年11月1日 上午 09:57
    2016年11月1日 上午 09:54
  • 通常沒事不會匯出帶私鑰的憑證,畢竟那事關資訊安全...

    當然你可能有你的需求,只是我個人還是不建議這麼做就是了。


    強力監督SQL Injection問題!!

      • 小朱的技術隨手寫:http://www.dotblogs.com.tw/regionbbs/
      • 雲端學堂Facebook: http://www.facebook.com/studyazure

    2016年11月1日 上午 10:14
    版主
  • 我懂您說的,不過的確需求有點特殊,謝謝版大的建議..

    2016年11月1日 上午 11:12