2012-02-13 20 views
5

Đây là theo dõi Mono xbuild error CS1548 - key file has incorrect formatPFX/pkcs12 để SNK chuyển đổi cho mono

Hi, tôi đã ứng dụng được viết bằng C# sử dụng VS2008. Hiện tại, chúng tôi đang chuyển ứng dụng này sang Mac bằng Mono.

Tôi đã cố trích xuất khóa từ tệp pfx. Trước tiên tôi sử dụng

`sn -pc key.pfx key.snk` 

này đã cho tôi một lỗi của

'Failed to extract public key for key pair -- Keyset does not exist'. 

sau đó tôi sử dụng

`sn -p key.pfx key.snk` 

này tạo ra các tập tin snk mà tôi muốn. tôi sau đó trong mono chọn Option project> hội Ký Khi xây dựng các lỗi

'key.snk is missing private key needed for signing'. 

Tôi nghĩ tôi hiểu rằng nếu tôi thực hiện một chính snk mới mà tôi có thể có chìa khóa cả tư nhân và công cộng trong đó. Chỉ vì vấn đề Legacy, chúng tôi thực sự muốn có thể sử dụng các giá trị pfx chính ban đầu.

Trả lời

6

Cảm ơn Poupou lớn vì đã đưa ra câu trả lời Tôi vừa thêm mã vào chương trình nhỏ mà tôi đã thực hiện để có được tiếng lóng.

using System.IO; 
using System.Security.Cryptography; 
using System.Security.Cryptography.X509Certificates; 

namespace PfxSnk 
{ 
    internal class Program 
    { 
     private static void Main(string[] args) 
     { 
      X509Certificate2 cert = new X509Certificate2(@"KEY.pfx", "pfxPassword", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet); 
      RSACryptoServiceProvider provider = (RSACryptoServiceProvider)cert.PrivateKey; 

      byte[] array = provider.ExportCspBlob(!provider.PublicOnly); 

      using (FileStream fs = new FileStream("FileName.snk", FileMode.Create, FileAccess.Write)) 
      { 
       fs.Write(array, 0, array.Length); 
      } 
     } 
    } 
} 
0

Hãy thử sn -p key.pfx key.snk thay thế.

+1

Từ câu hỏi, điều này trông giống với điều thứ hai anh đã thử. – poupou

2

sn -p được sử dụng để trích xuất một public key từ tên mạnh.

Tuy nhiên, bạn cần có khóa riêng để ký một hội đồng - vì vậy việc chuyển đổi (tích hợp sn) này không hữu ích cho mục tiêu của bạn.

Thật đáng buồn khi xem nhanh các tùy chọn Microsoft sn không ghi lại bất kỳ tùy chọn nào để thực hiện những gì bạn đang tìm kiếm.

Đề nghị của tôi là viết một công cụ nhỏ, tái sử dụng Mono snMono.Security.dll mã nguồn, để đọc các PFX (PKCS # 12) tập tin và viết nó trở lại như một tập tin SNK.

+0

Cảm ơn poupou Tôi là một chút của một người mới bắt đầu với việc ký kết hội đồng vv Tôi hiểu những gì các công cụ nên làm chỉ không có ý tưởng làm thế nào để bắt đầu làm cho nó. Vì vậy, tôi có thể sử dụng mono.security để đọc trong pfx và sau đó nhận được các khóa riêng và khóa công khai và sau đó tạo tệp snk mới với mono sn và các khóa đã truy xuất. Tôi có mật khẩu của tập tin pfx. Cảm ơn trước vì bất kỳ đề xuất nào tôi thực sự đánh giá cao nó. –

+0

tệp pfx của chúng tôi có một mật khẩu trên đó mà chúng tôi nghĩ rằng sẽ ngăn chặn mono đọc các phím như trong liên kết này https://bugzilla.xamarin.com/show_bug.cgi?id=725. Ngoài ra chúng tôi không biết làm thế nào để viết một tập tin snk với các khóa riêng tư và công khai chính xác - nó dường như tạo ra các phím ngẫu nhiên mới. –

+0

Lớp 'X509Certificate2' có thể đọc tập tin được bảo vệ bằng mật khẩu PFX (PKCS # 12). Nó cũng có thuộc tính 'PrivateKey' sẽ hiển thị cá thể' RSA'. Với điều này, bạn có thể sử dụng lớp 'StrongName' (từ Mono.Security.dll) để lưu nó trở lại dưới dạng tệp .snk' (không có mật khẩu). – poupou

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