2009-03-18 39 views
8

Chúng tôi vừa thiết lập giải pháp truy cập từ xa mới bằng cách sử dụng TS Gateway của Microsoft, yêu cầu một vài bước hơi khó sử dụng để người dùng làm việc (cài đặt gốc của chúng tôi ca cert, yêu cầu của RDP 6.1 client vv).Cài đặt chứng chỉ CA gốc qua mã trên Win32

Để làm cho quá trình thiết lập này trở nên dễ dàng nhất có thể (rất nhiều người dùng không phải là kỹ thuật), tôi đang tìm cách tạo một chương trình để tự động thực hiện tất cả các tác vụ này. Tôi có hầu hết nó làm việc, tuy nhiên tôi không hoàn toàn chắc chắn làm thế nào để đi về nhập khẩu cert CA gốc vào cửa hàng chứng chỉ Windows.

Vì điều này có khả năng có thể chạy trên nhiều máy tính với các mức bản vá và cập nhật khác nhau, tôi chỉ đạo rõ ràng về .NET và mọi thứ không phải là bản địa - công cụ nên 'chạy' mà không cần người dùng phải cài đặt thêm bất cứ điều gì (tốt, tôi sẽ nói Windows XP, không có gói dịch vụ, là phiên bản tối thiểu cần thiết của windows). Nói rằng, tôi không quan tâm đến việc sử dụng thứ gì đó của bên thứ ba nếu nó có thể đi kèm với công cụ, miễn là nó không lớn, và không giới thiệu bất kỳ bước tương tác nào. Lý tưởng nhất là một cái gì đó trong API cửa sổ sẽ là tốt nhất, tuy nhiên tôi dường như không thể theo dõi bất cứ điều gì có liên quan.

Hiện tại, công cụ này là một ứng dụng C++, vì vậy tôi không ngại nếu nó là công cụ cấp thấp.

Trả lời

7

Trước tiên, bạn cần phải mở các cửa hàng chứng chỉ gốc ...

HCERTSTORE hRootCertStore = CertOpenSystemStore(NULL,"ROOT"); 

Sau đó, thêm giấy chứng nhận bằng một trong những chức năng CertAdd, chẳng hạn như CertAddEncodedCertificateToStore.

CertAddEncodedCertificateToStore(hRootCertStore,X509_ASN_ENCODING | PKCS_7_ASN_ENCODING,pCertData,cbCertData,CERT_STORE_ADD_USE_EXISTING,NULL); 

pCertData và cbCertData có khả năng sẽ trỏ đến dữ liệu chứng chỉ mà bạn đọc từ một tập tin (không chắc chắn nếu giấy chứng nhận sẽ được trong một tập tin, hoặc làm thế nào bạn sẽ bao gồm nó trong ứng dụng của bạn).

Sau đó đóng cửa hàng với ...

CertCloseStore(hRootCertStore,0); 

Chú ý: Mã này nếu chạy như người sử dụng, cài đặt các giấy chứng nhận để lưu trữ gốc của người dùng, không phải là máy tính. Nó cũng dẫn đến một hộp thoại cảnh báo mà người dùng phải hiểu và chọn "Có" để cho phép nhập. Nếu chương trình thiết lập của bạn có thể chạy mã này trong tài khoản hệ thống, quá trình nhập sẽ ảnh hưởng đến cửa hàng gốc của máy tính và hộp thoại cảnh báo không được hiển thị.

0

Một số mẫu C++ trong Windows SDK từ MSDN

Chỉ cần sao chép chúng.

2

bạn cũng có thể xem CertAddEncodedCertificateToSystemStore

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