我正在开发一个通过安全通信与服务器通信的应用程序。所以应用程序的用户应该选择一个客户端证书文件(x509 证书)我想增加用户指定 TLS 版本的可能性。我没有在 x509Certificate cert = new X509Certificate(FileName) 的实例中找到任何标识 TLS 版本的属性。 如何进行 ?
最佳答案
TLS 版本和 X509 证书版本是完全不同的两件事。如果您指的是 TLS 版本,则可以使用 openssl 库的各种版本的客户端/服务器方法指定它(可以设置为 SSL_CTX 或 SSL):
const SSL_METHOD *SSLv23_method(void);
const SSL_METHOD *TLSv1_2_method(void);
const SSL_METHOD *TLSv1_1_method(void);
const SSL_METHOD *TLSv1_method(void);
const SSL_METHOD *SSLv3_method(void);
const SSL_METHOD *SSLv2_method(void);
但如果您真的是指 X509 版本,则可以使用 openssl 库函数来定义它。 X509 结构包含一个证书信息结构,定义如下 (1.0.2l):
typedef struct x509_cinf_st {
ASN1_INTEGER *version; /* [ 0 ] default of v1 */
ASN1_INTEGER *serialNumber;
X509_ALGOR *signature;
X509_NAME *issuer;
X509_VAL *validity;
X509_NAME *subject;
X509_PUBKEY *key;
ASN1_BIT_STRING *issuerUID; /* [ 1 ] optional in v2 */
ASN1_BIT_STRING *subjectUID; /* [ 2 ] optional in v2 */
STACK_OF(X509_EXTENSION) *extensions; /* [ 3 ] optional in v3 */
ASN1_ENCODING enc;
} X509_CINF;
你很可能会使用下面的函数来处理版本:
X509_CINF_new(void);
X509_CINF * d2i_X509_CINF(X509_CINF **val_out, const unsigned char **der_in, long length);
int i2d_X509_CINF(X509_CINF *val_in, unsigned char **der_out);
但由于 v2 和 v3 包含可选字段,因此没有理由不包含 v3。
关于c# - 如何为 x509 证书指定 TLS 版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47134708/