【问题标题】:How to specifiy the TLS version for an x509 Certificate如何为 x509 证书指定 TLS 版本
【发布时间】:2017-11-06 10:25:39
【问题描述】:

我正在开发一个通过安全通信与服务器通信的应用程序。因此,应用程序的用户应该选择一个客户端证书文件(x509 证书),我想为用户添加指定 TLS 版本的可能性。我没有在 x509Certificate cert = new X509Certificate(FileName) 的实例中找到任何标识 TLS 版本的属性。 如何进行 ?

【问题讨论】:

  • 为什么您希望 TLS 版本绑定到 证书? PKI 存在于 TLS 领域之外。
  • 这有点像说您想在驾驶执照上指定您驾驶的汽车的颜色。它们是“相关的”,但不是真的。

标签: c# ssl x509certificate


【解决方案1】:

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。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-06
    • 1970-01-01
    • 2014-02-28
    • 2020-05-23
    • 2021-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多