2013-03-11 38 views
5

Tôi đang phát triển một ứng dụng iOS sẽ cần đọc Tên chủ đề thay thế từ chứng chỉ (.pfx).OpenSSL Lấy tên thay thế chủ đề từ chứng chỉ

Security.framework không có một cách để có được thông tin này, vì vậy bạn Tôi đang sử dụng OpenSSL (openssl-1.0.1e)

Để đọc Chủ đề Tên Tôi đang sử dụng X509_get_subject_name (giấy chứng nhận) và cho Nhà phát hành tôi đang sử dụng X509_get_issuer_name (chứng chỉ) và đang hoạt động.

Sự cố là Tên thay thế chủ đề. Tôi không thể tìm thấy bất kỳ chức năng nào để trả lại thông tin này.

Có thể sử dụng OpenSSL để lấy Tên thay thế cho chủ đề không? Làm sao?

Edit:

tôi nhập khẩu giấy chứng nhận vào MAC keychain. Trên Tên thay thế chủ đề Tôi thấy Tên chính của NT và Tên RFC 822.

tôi đã cố gắng này, nhưng nó đang trở lại NULL:

GENERAL_NAME *name = (GENERAL_NAME*)X509_get_ext_d2i(cert,NID_subject_alt_name, NULL, NULL) 

Tôi đang đọc giấy chứng nhận với điều này:

X509 *cert; 
CFDataRef der = SecCertificateCopyData(certificate); 
const unsigned char * ptr = CFDataGetBytePtr(der); 
int len = CFDataGetLength(der); 
d2i_X509(&cert,&ptr,len); 

Trả lời

2

Bạn có thể lấy chủ đề x509 tên thay thế bằng cách sử dụng X509_get_ext_by_NID() sau đó X509_get_ext():

int loc = X509_get_ext_by_NID(X509 *, NID_subject_alt_name, -1); 

if (loc >= 0) { 
    X509_EXTENSION * ext = X509_get_ext(X509 *, loc); 

thì bạn phải phân tích cú pháp mở rộng bằng sk_GENERAL_NAME_n um() và sk_GENERAL_NAME_value() hoặc X509_get_ext_d2i().

+0

Tôi đang thử điều này: (GENERAL_NAME *) X509_get_ext_d2i (cert, NID_subject_alt_name, NULL, NULL); Nhưng tôi không có. Nó có hoạt động không? – Freedom

+0

Về lý thuyết, bạn chỉ nên nhận NULL nếu cert là NULL, chứng chỉ không có phần mở rộng tên chủ đề thay thế hoặc nhiều hơn một. Bạn có thể đăng mã tải chứng chỉ vào chứng chỉ và nội dung của chứng chỉ (hoặc đầu ra của openssl x509 -in -ext nếu bạn thích)? –

+0

Tôi đang sử dụng X509_get_subject_name() và đang hoạt động. Tôi đã nhập chứng chỉ vào mac keychain. Về tên thay thế chủ đề tôi thấy tên chính của NT và tên RFC 822 (chúng có cùng giá trị). Có thể đó là vấn đề? – Freedom

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