2009-11-23 34 views
6

Khi tôi cố gắng sử dụng SecPKCS12Import() từ khung Bảo mật như được cung cấp bởi Mac OS X 10.6, mã kết quả luôn là errSecUnimplemented, bất kể đối số được cung cấp.SecPKCS12Import() từ Security.framework không thành công trên OS X 10.6

Hơn nữa, trình liên kết không thể tìm thấy các biểu tượng cho các hằng số liên quan đến hàm này được khai báo trong SecImportExport.h (tức là kSecImportExportPassphrase, kSecImportItemIdentity, et al.).

Điều gì trên trái đất đang diễn ra với thư viện này - là chức năng được triển khai hay chưa? Tại sao trình liên kết có thể giải quyết tất cả các biểu tượng khác trong khung công tác chứ không phải các biểu tượng này? Làm cách nào để chuyển đổi một blob nhị phân được định dạng PKCS12 thành cặp SecIdentityRef hoặc SecCertificateRef và SecKeyRef?

Tôi đang làm gì sai? Tôi chắc chắn đây là một vấn đề PEBKAC. :-)


EDIT: Tôi thấy rằng tôi không rõ ràng trong câu hỏi của mình. Tôi biết rằng Security.framework được triển khai, vì tôi có thể sử dụng chức năng khác mà nó cung cấp mà không có sự cố. Với điều này, tôi khá chắc chắn rằng tôi đang liên kết với khung chính xác, vì nếu tôi loại bỏ các liên kết, không ai trong số các biểu tượng có thể được tìm thấy - như mong đợi. Khi tôi liên kết lại khung, tất cả các ký hiệu được tìm thấy, ngoại trừ các hằng số có liên quan đến SecPKCS12Import(), ví dụ: kSecImportExportPassphrase, kSecImportItemIdentity vv

Cho rằng tôi không thể sử dụng các biểu tượng này, tôi trôi qua trong chuỗi những gì có thể đã không chính xác (@"kSecImportItemIdentity", vv), nhưng các mã lỗi trả về là errSecUnimplemented. Điều này khiến tôi tin rằng có lẽ chức năng cụ thể này chưa được thực hiện.

Tôi đã thử sử dụng SDK 10.5, nhưng điều đó không hiệu quả, tất nhiên. :-)


CHỈNH SỬA: Nhập của tôi chỉ là #import <Security/Security.h> thông thường. Đối với đá, tôi đã thử #import <Security/SecImportExport.h> là tốt, nhưng điều này ảnh hưởng không thay đổi. Điều đó nói rằng, lỗi được phát hành bởi trình liên kết chứ không phải trình biên dịch.

Tôi đã chạy dyldinfo -export Security.framework/Security để liệt kê các biểu tượng được xuất bởi thư viện và tìm thấy nhiều biểu tượng new, nhưng kSecImportExportPassphrase và bạn bè bị thiếu dễ thấy. Điều này có thể giải thích tại sao mối liên kết không thể tìm thấy các biểu tượng. Biểu tượng cho SecPKCS12Import xuất hiện trong bảng biểu tượng và tôi có thể gọi điều đó mà không có vấn đề gì, nó chỉ là chức năng dường như không có ở đó.

+0

Đã được xác nhận là chưa được thực hiện, ít nhất là 10.6.2 - vui lòng gửi một Radar về điều này. Chi tiết trong câu trả lời của tôi dưới đây. –

Trả lời

3

Bảo mật.framework chắc chắn nhất được triển khai - xem Security Reference Update có tài liệu về những gì đã thay đổi trong khung trong 10.6 và trước đó. Vì bạn biết các tiêu đề để sử dụng, tôi cho rằng bạn đã tham khảo Security Framework Reference.

Bạn có chắc chắn mình đang nhập và liên kết đúng khuôn khổ không? (Đó là trong /System/Library/Security.framework, vì vậy bạn không cần phải chỉ định đường dẫn.)

Trình biên dịch có đưa ra cảnh báo hoặc lỗi nói rằng các ký hiệu trong SecImportExport.h không xác định? (Nếu không, làm thế nào để bạn biết chúng được "khai báo nhưng không xác định"?)

Khi bạn nói rằng điều này không thành công trên 10.6, bạn đã thử nó trên một phiên bản hệ điều hành trước đó thành công chưa?


EDIT: Được rồi, kể từ khi bạn đang sử dụng các bộ phận khác của Security.framework thành công, và các API và các hằng số bạn đang cố gắng sử dụng được 10,6 chỉ, nó không có vẻ như một vấn đề liên kết . Nhập khẩu của bạn trông như thế nào? Bạn có chắc chắn bạn đang nhập SecImportExport.h đúng cách không? Các hằng số được khai báo ngay trên hàm SecPKCS12Import(), vì vậy nếu bạn nhận được cảnh báo cho các hằng số, bạn sẽ nhận được một cho hàm cũng không được xác định.


EDIT: Tôi đã xác nhận với một thành viên của nhóm nghiên cứu tại Apple hoạt động trên Security.framework rằng chức năng này hiện không được thực hiện. Vui lòng gửi một lỗi để hiểu về điều này tại http://bugreport.apple.com đối với thành phần Security (New Bugs), phiên bản X. Bao gồm URL cho câu hỏi này trong báo cáo của bạn. Rất tiếc, hiện tại không có câu trả lời nào tốt hơn.

+0

Do sự bất lực của tôi, tôi đã trả lời câu trả lời này với câu trả lời của chính tôi dưới đây. –

+0

Tôi đã sửa đổi lại câu hỏi. Hy vọng rằng điều này sẽ giúp. :-) –

+0

Bản cập nhật mới nhất của bạn khá hữu ích, cụ thể là đây là những lỗi liên kết. Thực tế là một số biểu tượng không được xuất khẩu là khó hiểu. Tôi sẽ đào sâu hơn để xem liệu tôi có thể tìm được câu trả lời dứt khoát ... –

1

Theo hiểu biết của tôi, Apple rất giỏi trong việc triển khai một phần hoặc không để lại tài liệu. Nếu bạn thực sự không thể tìm thấy triển khai thực sự bạn cần, bạn có thể sử dụng OpenSSL để trích xuất các đốm màu và sau đó các dịch vụ Bảo mật để nhập chúng vào một khóa hoặc quá trình tiếp theo với các phương thức Bảo mật/CDSA. Điều đó sẽ giúp bạn đi và bạn có thể ping kết nối Apple dev với các câu hỏi khác, nếu bạn có khả năng.

Hơn nữa, nhìn vào /System/Library/Frameworks/Security.framework/Headers/SecImportExport.h trên máy 10.6.2 của tôi, tôi thấy tài liệu tham khảo để PKCS # 12 trong tài liệu của SecKeychainItemImport()

Tìm kiếm tệp đó cho "PKCS12" để biết thêm thông tin.

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