我正在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