2013-01-21 10 views
10

BounceyCastleなし。C#を使用して証明書のJavaから公開鍵を取得する

私は自分の証明書を持っており、GetPublicKey()という値は、家のJava側で必要な値ではありません。

証明書がX509Certificate2オブジェクトの場合、DSA暗号化を使用します。 makecertに

Convert.ToBase64String(cert.GetPublicKey())戻り

AoGAeaKLPS4ktxULg3YQL0ePphF08tKsddZtv3SDERa8b8go5h3AxmWjuDd8y9dIzZFe8KDjY9Lg 
JU4JOA27snO3fCsPAVkmJ0O2pbxn+wzT7oij2FOLcCAjnFNNsoaWrtMv+I4XXl18DyDQLFkZiPx9 
2UyuDzoQTGxgCrPccQPjUgY= 

Convert.ToBase64String(cert.RawData)私のJava対応は、同じ証明書ファイルを使用して、公開鍵を取得し、しかし戻っ

MIICxjCCAoagAwIBAgIQbdIpaaU9rZdA+wJKA+mUfDAJBgcqhkjOOAQDMBYxFDASBgNVBAMTC0RT 
QSBSb290IENBMB4XDTEzMDExMDE3MTAzNVoXDTM5MTIzMTIzNTk1OVowFDESMBAGA1UEAxMJVXNl 
ciBOYW1lMIIBtzCCASwGByqGSM44BAEwggEfAoGBALWn4Iyvn7LFkV9ULoZtwJ8J1c+ibsbhjPiw 
+xUgRW2LAZV2/Lv89W1jCprNkf87tN/ogMT/1VSIOo7ff/tqVRTWPVJ1ZMrR9VOnF2k/Sorg8Cmr 
sAClsSWrACKIwK2XKJGWTU4oMLxvYcu85+yQ4nWLofgA/+WARrJ/rk2aUSZ3AhUAlqPLNh6JZkpD 
G/OXKzhsZFUiDrkCgYEAoICjHltWOgN8/2uyAaMTNrBuJfi/HM9AWe5B8m9HDfl1K6Qx2Ni6tbYP 
uFtvHdGnoqqn46l7eY+xjpi5GEydvkPtAQKmTDGcSh6vtnTeNV15Hafg5pXUKw1OisIr/bpx/KIk 
cgCtSo6qC5IhDzeZXnfJYcE+8U+O6hEr5dwByN4DgYQAAoGAeaKLPS4ktxULg3YQL0ePphF08tKs 
ddZtv3SDERa8b8go5h3AxmWjuDd8y9dIzZFe8KDjY9LgJU4JOA27snO3fCsPAVkmJ0O2pbxn+wzT 
7oij2FOLcCAjnFNNsoaWrtMv+I4XXl18DyDQLFkZiPx92UyuDzoQTGxgCrPccQPjUgajWTBXMAwG 
A1UdEwEB/wQCMAAwRwYDVR0BBEAwPoAQmhMLkJ/cPXGitvGMB81tZaEYMBYxFDASBgNVBAMTC0RT 
QSBSb290IENBghDCpMJ75zgZokJVlZmNq/LTMAkGByqGSM44BAMDLwAwLAIUYUALM9WhgwzRMj1y 
MSdoparmYvICFFxLgFr2ow3NGTkqWvHIXtjO9R0G 

$ cat david-509.cer | openssl x509 -pubkey 
-----BEGIN PUBLIC KEY----- 
MIIBtzCCASwGByqGSM44BAEwggEfAoGBALWn4Iyvn7LFkV9ULoZtwJ8J1c+ibsbh 
jPiw+xUgRW2LAZV2/Lv89W1jCprNkf87tN/ogMT/1VSIOo7ff/tqVRTWPVJ1ZMrR 
9VOnF2k/Sorg8CmrsAClsSWrACKIwK2XKJGWTU4oMLxvYcu85+yQ4nWLofgA/+WA 
RrJ/rk2aUSZ3AhUAlqPLNh6JZkpDG/OXKzhsZFUiDrkCgYEAoICjHltWOgN8/2uy 
AaMTNrBuJfi/HM9AWe5B8m9HDfl1K6Qx2Ni6tbYPuFtvHdGnoqqn46l7eY+xjpi5 
GEydvkPtAQKmTDGcSh6vtnTeNV15Hafg5pXUKw1OisIr/bpx/KIkcgCtSo6qC5Ih 
DzeZXnfJYcE+8U+O6hEr5dwByN4DgYQAAoGAeaKLPS4ktxULg3YQL0ePphF08tKs 
ddZtv3SDERa8b8go5h3AxmWjuDd8y9dIzZFe8KDjY9LgJU4JOA27snO3fCsPAVkm 
J0O2pbxn+wzT7oij2FOLcCAjnFNNsoaWrtMv+I4XXl18DyDQLFkZiPx92UyuDzoQ 
TGxgCrPccQPjUgY= 
-----END PUBLIC KEY----- 

を取得を使用して作成そして、私の問題。証明書からこの値を取得するにはどうすればよいですか?

ありがとうございます!

+1

を使用することができますか? –

+0

ありがとうございますが、ダイスはありません。上記の応答が追加されました。 –

+1

そしてcert.PublicKey.Key.ToXmlString(false)? –

答えて

0

Ian Boyd's answerを参照してください。これは、あなたがエンコーディングについて探しているすべての答えを提供するだけです。 DSAではなくRSAに関連していますが、PEM/DER/ASN.1エンコーディングに関するすべての情報がここにあります。これはあなたの問題です。

1

cert.GetPublicKey()の代わりにcert.PublicKey.EncodedKeyValueを使用してください。

EncodedKeyValueは、生鍵データではなく、ASN1でエンコードされた値を提供します(GetPublicKey())。

だから、あなたは、今どのようにcert.RawDataのBASE64について、それを検証することはできませんデビッドこのコード

void ExportPublicKey(X509Certificate2 cert, string filePath) 
{ 
    byte[] encodedPublicKey = cert.PublicKey.EncodedKeyValue.RawData; 
    File.WriteAllLines(filePath, new[] { 
     "-----BEGIN PUBLIC KEY-----", 
     Convert.ToBase64String(encodedPublicKey, Base64FormattingOptions.InsertLineBreaks), 
     "-----END PUBLIC KEY-----", 
    }); 
} 
関連する問題