我正在C中創建一個用於修改X509
證書的api,我想添加一種刪除擴展的方法(例如subjectNameAlt
)。我將如何通過OpenSSL API執行此操作?如何從X509中刪除擴展名?
1
A
回答
2
您可以使用此功能X509_NAME_delete_entry()
:
X509_NAME_delete_entry()刪除名稱在位置LOC的條目。 已刪除的條目被返回並且必須被釋放。
手冊頁:http://linux.die.net/man/3/x509_name_delete_entry
編輯:
實際得到和刪除擴展,可以使用以下功能:
X509_EXTENSION *X509_delete_ext(X509 *x, int loc);
例子:
int idx = X509_get_ext_by_NID(cert, nid, -1); //get the index
X509_EXTENSION *ext = X509_get_ext(cert, idx); //get the extension
if (ext != NULL){ //check that the extension was found
X509_delete_ext(cert, idx); //delete the extension
X509_EXTENSION_free(ext); //free the memory
}
0
chacham15的回答是不正確的。如上所述通過the documentation:
X509v3_get_ext()
[和X509_get_ext()
]從x
檢索擴展同上。 索引loc可以取0到X509_get_ext_count(x) - 1
之間的任何值。 返回的擴展名是一個內部指針,其一定不能是 由應用程序釋放。
釋放擴展名的正確方法如下。
int idx = X509_get_ext_by_NID(cert, nid, -1); //get the index
X509_EXTENSION *ext = X509_get_ext(cert, idx); //get the extension
if (ext != NULL){ //check that the extension was found
X509_EXTENSION *tmp = X509_delete_ext(cert, idx); //delete the extension
X509_EXTENSION_free(tmp); //free the memory
}
+0
chacham的回答在4年前正確嗎? –
+0
我很困惑...你寫的'正確'的方式看起來與標記答案中的例子完全相同。 – chacham15
相關問題
- 1. 如何從Hybris中刪除擴展名?
- 2. 刪除擴展名從URL
- 3. 從Vs2013刪除擴展名
- 4. 從文件名中刪除擴展名
- 5. 從文件名中刪除擴展名
- 6. 從URL中刪除.php擴展名(.htaccess)
- 7. 從文件中刪除擴展名
- 8. 從URL中刪除擴展名(.htaccess)
- 9. 從密鑰中刪除擴展名
- 10. 從URL中刪除文件擴展名
- 11. 如何從文件名中刪除擴展名?
- 12. 如何使用別名從url中刪除文件擴展名
- 13. 如何從文件名(VBA)中刪除文件擴展名
- 14. 如何從文件名中刪除文件擴展名?
- 15. 如何從Firebug擴展中刪除fbLocationList
- 16. 如何刪除文件的擴展名?
- 17. 如何從nginx中的URL中刪除文件擴展名?
- 18. 刪除擴展名從文件
- 19. 從URL刪除文件擴展名
- 20. 從.htaccess刪除.php擴展名(404?)
- 21. NGINX刪除刪除擴展名爲.html
- 22. 刪除擴展名爲.php
- 23. as3刪除擴展名爲
- 24. 刪除.gz擴展名
- 25. 刪除域名擴展
- 26. 刪除文件擴展名
- 27. 刪除擴展名引用
- 28. Fortran:如何從字符中刪除文件擴展名
- 29. 如何從實時網站中刪除.php擴展名
- 30. 如何從地址欄中刪除.php擴展名?
這就是專有名稱,不是嗎? subjectNameAlt不是可分辨名稱的一部分,它是x509v3擴展的一部分。 – chacham15
是的,你是對的。 X509_NAME_delete_entry()僅適用於證書信息字段。 – Paul
用示例說明如何使用證書擴展來更新我的評論。希望能幫助到你 ! – Paul