2012-01-14 31 views
5

Theo dõi tối đa previous question, tôi có một số mã cần có chứng chỉ X509 với khóa riêng. Như đã nêu trong các câu trả lời, trong quá trình sản xuất, điều này sẽ xảy ra khi sử dụng X509Store.Làm thế nào để có được giá trị mã hóa cơ sở 64 của chứng chỉ bằng khóa riêng?

Cách tốt nhất để kiểm tra đơn vị này là gì? Tôi muốn phát triển và thử nghiệm với các chứng chỉ khác nhau hơn sẽ được sản xuất, vì vậy tôi có thể tạo ra một giao diện CertificateRepository để cung cấp các triển khai khác nhau.

Để thực hiện thử nghiệm/dev, sẽ tốt hơn nếu chỉ sử dụng chuỗi mã hóa base64 của chứng chỉ và tạo một cá thể xác thực theo cách đó, với mật khẩu giả và dấu kiểm thử/dev chuyên dụng. Tuy nhiên cho đến nay tôi đã không thể tìm ra cách để mã hóa một chứng chỉ với khóa riêng như là một chuỗi base64. Mỗi lần tôi cố gắng xuất cert từ MMC làm base-64, nó chỉ mã hóa khóa công khai.

+0

Làm cách nào để bạn tạo chứng chỉ? –

+0

Được tạo bằng makecert.exe với các công tắc này: -r -pe – danludwig

Trả lời

9

Tôi không thể tìm ra cách thực hiện điều này bằng mmc. Tuy nhiên tôi đã tìm ra cách để làm điều đó trong mã:

var store = new X509Store(StoreName.My, StoreLocation.LocalMachine); 
store.Open(OpenFlags.ReadOnly); 
var certificate = store.Certificates.Find(X509FindType.FindByThumbprint, 
    "BLABLABLA", false)[0]; // doesn't matter how you get the cert 
var exported = certificate.Export(X509ContentType.Pfx, "the password"); 
var base64 = Convert.ToBase64String(exported); 
store.Close(); 

Chừng nào các CERT bạn đang nhận được từ các cửa hàng x 509 có khóa riêng, nó sẽ kết thúc trong arrray byte xuất khẩu, mà bạn có thể sau đó chuyển đổi thành chuỗi base64.

0

Đảm bảo bạn đánh dấu khóa riêng tư là có thể xuất được khi bạn thêm chứng chỉ vào cửa hàng.

Nếu bạn sử dụng makecert để tạo chứng chỉ, hãy thêm tùy chọn -pe để đặt khóa riêng tư có thể xuất.

+0

Tôi đã làm điều đó, nhưng nó sẽ không cho phép tôi xuất như bất kỳ thứ gì ngoại trừ pkcs12 (.pfx) – danludwig

Các vấn đề liên quan