Forums Neueste Beiträge
 

private Key aus P12 Datei

08/10/2008 - 08:10 von Andre Rust | Report spam
Hallo,
ich brauche Hilfe zu folgendem.

Ich habe eine P12-Datei, die ich mit X509 auslese. Wie kann ich den privaten
Schlüssel bekommen, so das ich danach eine Signierung machen kann. Ich bin
schon die ganze Zeit am testen, aber dieer Schlüssel làßt sich nicht
auslesen. In einer PEM-Datei kann ich den sehen. Nur lesen klappt auch hier
nicht. Der Private Schlüssel sollte als XML gespeichert sein.

Danke.

André R.

Hier der Code den ich benutze:

HIER AUSLESEN:
private void GetAllKeys()
{
X509Certificate2 x509 = new X509Certificate2();
X509KeyStorageFlags KeyStorageFlags = new X509KeyStorageFlags();

if (mReferenceData.SignatureFile.Length < 1)
{
mKeyClass.x509_Error = "File name not found";
return;
}

try
{
rawData = ReadFile(SignatureFile);

x509.Import(rawData, mReferenceData.Password,
KeyStorageFlags);

mKeyClass.x509_Subject = x509.Subject;
mKeyClass.x509_Issuer = x509.Issuer;
mKeyClass.x509_Version = x509.Version;
mKeyClass.x509_NotBefore = x509.NotBefore;
mKeyClass.x509_NotAfter = x509.NotAfter;
mKeyClass.x509_Thumbprint = x509.Thumbprint;
mKeyClass.x509_SerialNumber = x509.SerialNumber;
mKeyClass.x509_PublicKey_Oid_FriendlyName =
x509.PublicKey.Oid.FriendlyName;
mKeyClass.x509_PublicKey_EncodedKeyValue_Format =
x509.PublicKey.EncodedKeyValue.Format(true);
mKeyClass.x509_RawData_Length = x509.RawData.Length;
mKeyClass.x509_s = x509.ToString(true);
mKeyClass.x509_PublicKey_Key_Xml =
x509.PublicKey.Key.ToXmlString(false);
mKeyClass.x509_HasPrivateKey = x509.HasPrivateKey;

if (x509.HasPrivateKey)
{
mKeyClass.x509_PrivateKey =
x509.PrivateKey.KeyExchangeAlgorithm;
mKeyClass.x509_Error = "";
}
else
{
mKeyClass.x509_Error = "No private key found. Please
convert with the tool";
}

X509Store store = new X509Store();
store.Open(OpenFlags.MaxAllowed);
store.Add(x509);
store.Close();
}
catch (Exception ExG)
{
mKeyClass.x509_Error = ExG.Message.ToString() + " (ExG)";
}
}
}


HIER SIGNIEREN:
public string Sign(string TextToSign, string PrivateKey)
{
byte[] valueToHash = null;
byte[] signedValue = null;
string ErrorText = "";

try
{
mSign = new Sign(TextToSign, PrivateKey);

RSACryptoServiceProvider rsaCryptoServiceProvider = new
RSACryptoServiceProvider();
RSAPKCS1SignatureFormatter rsaFormatter = new
RSAPKCS1SignatureFormatter(rsaCryptoServiceProvider);
RSA RSA = RSA.Create();
ASCIIEncoding Encoding = new ASCIIEncoding();
SHA1Managed SHA1 = new SHA1Managed();
rsaFormatter.SetHashAlgorithm("SHA1");

rsaCryptoServiceProvider.ImportCspBlob(ConvertStringHexadecimalToByteArray(mSign.PrivateKey.ToString()));
rsaFormatter.SetKey(RSA);

valueToHash = Encoding.GetBytes(PrivateKey);
signedValue =
rsaFormatter.CreateSignature(SHA1.ComputeHash(valueToHash));
}
catch (Exception sEx)
{
ErrorText = sEx.Message.ToString() + " (sEx)";
}
return Convert.ToBase64String(signedValue);
}
 

Lesen sie die antworten

#1 Frank Dzaebel
08/10/2008 - 10:54 | Warnen spam
Hallo Andre,

Ich habe eine P12-Datei, die ich mit X509 auslese. Wie kann ich den privaten
Schlüssel bekommen, ... Der Private Schlüssel sollte als XML gespeichert sein.



was ist, wenn Du folgendes "x509.PublicKey.Key.ToXmlString(false)"
benutzt?

private void Form1_Load(object sender, EventArgs e)
{
CertSelect.Start();
}

class CertSelect
{
public static void Start()
{
try
{
X509Store store = new X509Store("MY",
StoreLocation.CurrentUser);
store.Open(OpenFlags.ReadOnly | OpenFlags.OpenExistingOnly);
X509Certificate2Collection collection (X509Certificate2Collection)store.Certificates;
X509Certificate2Collection fcollection (X509Certificate2Collection)collection.Find(X509FindType.FindByTimeValid,
DateTime.Now, false);
X509Certificate2Collection scollection X509Certificate2UI.SelectFromCollection(fcollection, "Test Certificate
Select", "Select a certificate from the following list to get
information on that certificate", X509SelectionFlag.MultiSelection);
Console.WriteLine("Number of certificates: {0}{1}",
scollection.Count, Environment.NewLine);
foreach (X509Certificate2 x509 in scollection)
{
byte[] rawdata = x509.RawData;
Console.WriteLine("Content Type: {0}{1}",
X509Certificate2.GetCertContentType(rawdata), Environment.NewLine);
Console.WriteLine("Friendly Name: {0}{1}", x509.FriendlyName,
Environment.NewLine);
Console.WriteLine("Certificate Verified?: {0}{1}",
x509.Verify(), Environment.NewLine);
Console.WriteLine("Simple Name: {0}{1}",
x509.GetNameInfo(X509NameType.SimpleName, true), Environment.NewLine);
Console.WriteLine("Signature Algorithm: {0}{1}",
x509.SignatureAlgorithm.FriendlyName, Environment.NewLine);
Console.WriteLine("Private Key: {0}{1}",
x509.PrivateKey.ToXmlString(false), Environment.NewLine);
Console.WriteLine("Public Key: {0}{1}",
x509.PublicKey.Key.ToXmlString(false), Environment.NewLine);
Console.WriteLine("Certificate Archived?: {0}{1}",
x509.Archived, Environment.NewLine);
Console.WriteLine("Length of Raw Data: {0}{1}",
x509.RawData.Length, Environment.NewLine);
X509Certificate2UI.DisplayCertificate(x509);
x509.Reset();
}
store.Close();
}
catch (CryptographicException exp)
{
Console.WriteLine("Information could not be written out for this
certificate." + exp.Message);
}
}
}


ciao Frank
Dipl.Inf. Frank Dzaebel [MCP/MVP C#]
http://Dzaebel.NET

Ähnliche fragen