2013-10-31 47 views
4

我得到了一個私鑰,這個私鑰證明是pkcs8格式,我使用它轉換成了一個pem文件下面的命令:如何將一個私鑰轉換爲可用於.NET的窗口的格式

openssl pkcs8 -inform der -nocrypt -in private.key -out pkey.pem 

我現在需要將其轉換爲PKCS12,所以我可以用它在.NET創建X509證書(我也想將其導入到Windows證書管理器)。

我試過這個命令:

openssl pkcs12 -export -name myalias -in mycert.crt -inkey pkey.pem -out keystore.p12 

然而,我沒有公鑰,我已經使用pkey.pem文件作爲-in ARG嘗試,但它告訴我No certificate matches private key。如果我嘗試沒有-in參數,那麼什麼都不會發生(我的意思是什麼都沒有,直到按ctrl-c時纔有空行)。

如何從私鑰生成公鑰或轉換爲沒有公鑰的pkcs12?

這個問題的第一部分,是from the answer here

found an answer這給了我一些希望,這說來運行這個命令(-nocerts):

openssl pkcs12 -export -nocerts -inkey your.private.key.pem -out your.private.key.p12 

但是,當我嘗試導入文件導入Windows密鑰存儲區,它在導入時表示The specified file is empty

我也設法生成證書籤名請求from instructions here,其生成的證書文件,但該命令仍然不接受說No certificate matches private key

Another answer表明生成的公鑰,這是我做的,但當我使用它作爲-in ARG還在說No certificate matches private key,這是從私人密鑰生成此公鑰我不明白,使用這個命令:openssl rsa -in privkey.pem -pubout > key.pub

編輯: 我下面貼的答案,但如上所述,我無法驗證此信息mation或告訴它是否有效。如果有人有任何進一步的信息,請讓我知道。

回答

2

這似乎是:

下面的命令把它變成在窗口使用的格式:

轉換從PKCS8/DER私鑰的PEM文件格式

openssl pkcs8 -nocrypt -in dealerPrivate.key -inform der -outform pem -out private.pem 

轉換的從x509/DER到PEM文件格式的證書

openssl x509 -inform der -in dealerCertificate.x509 -out public.pem 

合併兩個f到爾斯一個PKCS12文件 - 你會被提示輸入密碼來保護P12與

openssl pkcs12 -export -inkey private.pem -in public.pem -out mycert.p12 

這給了我一個PKCS12證書,我已經加入到Windows鍵存儲,然後可以訪問(我認爲)。 NET並將其附加到我的WCF請求。

可惜我不能確認這工作與相同的數據我的要求,這是完全混亂的服務響應:

請求:

POST http://[HOST].com/services/fsa/1.0 HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
VsDebuggerCausalityData: uIDPo0ii5Jr5wONMi6i/jkMQdFkAAAAArRV2zOsUrEioQMkqYDWulG6ktjqzCoRLtP+/9VQSARUACQAA 
SOAPAction: "" 
Host: [HOST] 
Content-Length: 299 
Expect: 100-continue 
Connection: Keep-Alive 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"><list xmlns="http://[HOST].com/services/fsa/1.0"><String_1 xmlns="">[MY_STRING]</String_1></list></s:Body></s:Envelope> 

響應:

HTTP/1.1 200 OK 
Date: Thu, 31 Oct 2013 12:19:38 GMT 
Server: Apache/2.2.17 (Unix) mod_ssl/2.2.17 OpenSSL/1.0.0a mod_jk/1.2.31 
X-Powered-By: Servlet 2.5; JBoss-5.0/JBossWeb-2.1 
VsDebuggerCausalityData: uIDPo0ii5Jr5wONMi6i/jkMQdFkAAAAArRV2zOsUrEioQMkqYDWulG6ktjqzCoRLtP+/9VQSARUACQAA 
SOAPAction: "" 
host: [HOST] 
Expect: 100-continue 
connection: Keep-Alive, Keep-Alive 
Content-Length: 299 
Keep-Alive: timeout=2, max=100 
Content-Type: text/xml;charset=utf-8 

<s:Envelope xmlns:s='http://schemas.xmlsoap.org/soap/envelope/'><s:Body xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance'><list xmlns='http://[HOST].com/services/fsa/1.0'><String_1 xmlns=''>[MY_STRING]</String_1></list></s:Body></s:Envelope> 
+1

您創建的是由您自己的私鑰簽名的自簽名證書。注意...爲了避免混淆,您的證書的文件擴展名不應該是「.csr」。這是指簽名請求。我的問題是您的客戶端應用程序中使用的私鑰和證書是什麼?它是用於認證/授權(通過SSL)還是用於從服務器簽署一些內容?或者是其他東西? – gtrig

+0

我被第三方提供了私鑰和x509證書,所以我假設我需要使用私鑰對我的請求進行簽名和/或加密,並使用公鑰從其Web服務讀取響應。我在這裏有一個關於綁定的問題:http://stackoverflow.com/q/19427768/198048。在排序,不知道。顯然我必須猜測,但現在我在.Net中有一些可用的東西,我比我之前的領先一步。 –

+0

通常,客戶端和網絡服務器之間的加密通信是通過SSL/TLS完成的。網址以「https://」開頭。如果這是您應該使用的機制,並且您獲得了私鑰,則可能需要「雙向」或「相互」SSL,這意味着客戶機必須向服務器進行身份驗證。這是通過私鑰完成的,它是匹配的證書。如果服務器信任簽署客戶端證書的CA,則可以對其進行身份驗證和授權。如果客戶端信任簽署了服務器證書的CA,它將使用所有安全連接。 – gtrig

相關問題