Announcement

Collapse
No announcement yet.

Privater Schlüssel aus einer P12-Datei

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Privater Schlüssel aus einer P12-Datei

    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(rsaCryptoServiceProvide r);
    RSA RSA = RSA.Create();
    ASCIIEncoding Encoding = new ASCIIEncoding();
    SHA1Managed SHA1 = new SHA1Managed();
    rsaFormatter.SetHashAlgorithm("SHA1");

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

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

  • #2
    Hallo,

    schau mal hier: http://www.microsoft.com/communities...&cr=&sloc=&p=1

    Den privaten Schlüssel alleine kannst du nicht exportieren - nur den gesamten Schlüssel, also public + private (ich kann mich auch täuschen).

    Wenn du bei
    Code:
    mKeyClass.x509_PublicKey_Key_Xml =
    x509.PublicKey.Key.ToXmlString(false);
    das Argument auf true setzte wird der gesamte Schlüssel exportiert und dieser kann zur Signierung verwendet werden.


    mfG Gü
    "Any fool can write code that a computer can understand. Good programmers write code that humans can understand". - Martin Fowler

    Comment

    Working...
    X