C#将公钥X.509编码的密钥存储在ANS.1中

时间:2018-06-28 16:57:55

标签: c# public-key-encryption x509 public-key

我正在尝试实现API。 (https://www.loxone.com/dede/wp-content/uploads/sites/2/2016/08/0903_Communicating-with-the-Miniserver.pdf

当您转到第5页时,您将在2.b)下看到我需要以以下格式存储公钥:ANS.1中的X.509编码密钥。

问题是我不知道如何在C#中执行此操作...

有人可以帮我解决这个问题吗:)

谢谢!

这是我得到的publicKey的示例:

----- BEGIN CERTIFICATE ----- MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC393RoCVFixg3cZicByw05GYqlIkmqfx1lylJqBaF7BMI / FffD5BBoFpFurj4N1pDdMF / QhBEj1Pb3XGOkrHFCinYc0lCMbSjreE + QPjmnWnZeaPd3mtBfdcTSF6hYH0regFU8nvFVgLsoBUCMjuhfsvuaW4sLylU6KhZ9hCqVQwIDAQAB ----- END CERTIFICATE -----

2 个答案:

答案 0 :(得分:0)

我认为您需要将此公钥导出为X.509,编码为ANS.1,可以是.pem文件。

来自https://serverfault.com/questions/9708/what-is-a-pem-file-and-how-does-it-differ-from-other-openssl-generated-key-file/9717#9717

PEM本身不是证书,它只是一种编码数据的方式。 X.509证书是通常使用PEM编码的一种数据。

PEM是X.509证书(其结构是使用ASN.1定义的),使用ASN.1 DER(可区分的编码规则)进行编码,然后通过Base64编码运行并停留在纯文本锚行之间(BEGIN证书)和END CERTIFICATE)。

您可以使用openssl制作一个符合ANS.1的.pem文件。

openssl req -new -x509 -days 365 -nodes -out ./cert.pem -keyout ./cert.pem

答案 1 :(得分:0)

大概,“ ANS.1”表示“ ASN.1”(抽象语法符号1),“ ASN.1”表示“ DER”(抽象语法符号1的编码规则)。

要将您当前的PEM证书转换为“ DER”证书,您可以a)openssl x509 -in cert.pem -out cert.der -outform der或b)阅读“ ----- BEGIN CERTIFICATE -----”和“- --- END CERTIFICATE -----“,并将其转换为字节(例如Convert.FromBase64String)。