2015-09-22 33 views
7

Mam plik certyfikatu .p12 i tworzę moje świadectwo tak:„CryptographicException: Nie można odnaleźć żądany obiekt”, podczas gdy plik certyfikatu istnieje

var certificate = new X509Certificate2(certFileLocation, "mySecret", X509KeyStorageFlags.Exportable); 

Kiedy certFileLocation jest na pulpicie i daję bezwzględną ścieżkę , kod działa. Ale kiedy mogę umieścić całą zawartość pliku .p12 w nowym pliku w moim roztwór i ustawić właściwość pliku Copy to Output Directory do „Copy jeśli nowsze” dostaję CryptographicException wyjątek, który mówi:

nie potrafisz znajdź żądany obiekt

Sprawdzam również za każdym razem, czy plik jest na miejscu i jest. Jaka jest różnica między tymi dwoma scenariuszami i dlaczego nie mogę odczytać pliku z tym drugim podejściem?

+0

Jaka jest wartość 'certFileLocation'? Również, gdy otrzymasz wyjątek, uruchamiasz, debugujesz lub testujesz (MSTest) kod? –

+0

'certFileLocation' będzie lokalizacją pliku' p12'. Dzieje się tak, gdy debuguję. – Disasterkid

Odpowiedz

0

Jeśli używasz MS-test, trzeba jeszcze kilka bitów:

  1. upewnić się, że runsettings są skonfigurowane do NIE usuwać foldery po zakończeniu testów, jeśli chcesz zobaczyć wszystkie informacje wyjściowe Po- fakt; to spowodowało mi 30 minut straconego czasu!
  2. dodaj atrybut DeploymentItem do swojego TestMethod. to zostanie skopiowane do folderu Out.
  3. użyć TestContext.DeploymentDirectory w folderze "root":

    X509Certificate2 GetCert() 
    { 
        var stx = File.Open(Path.Combine(TestContext.DeploymentDirectory, "thecertfile.pfx"), FileMode.Open); 
        using (BinaryReader br = new BinaryReader(stx)) 
        { 
         return new X509Certificate2(br.ReadBytes((int)br.BaseStream.Length), "password"); 
        } 
    } 
    
    [TestMethod, DeploymentItem("thecertfile.pfx")] 
    public void Signing_FlameTest() 
    { 
        var cert = GetCert(); 
        Assert.IsNotNull(cert, "GetCert failed"); 
    } 
    
3

miałem podobny problem. To działało ze stałym plikiem, ale nie działało z plikiem w stosunku do moich testów jednostkowych. Było to tak oszałamiające, że w końcu rzuciłem okiem na pliki i porównałem je binarnie. One nie są takie same. Zostały one odczytane i zapisane w postaci ciągów, co spowodowało, że były nieco inne z powodu interpretacji Unicode. Kiedy sam je skopiowałem (z zasobu) jako binarny (bajt []), wszystko znów działało. Mam nadzieję, że to rozwiąże twój problem.