将 X.509 证书的主题名称解析到缓冲区

Posted

技术标签:

【中文标题】将 X.509 证书的主题名称解析到缓冲区【英文标题】:Parse the Subject name of a X.509 certificate to a buffer 【发布时间】:2021-03-16 04:30:29 【问题描述】:

我正在尝试中,但我收到的是负值。可能出了什么问题?

   int32_t ret;
   size_t n = 0;
   uint8_t *p = NULL;
   mbedtls_x509_crt testcert;
   mbedtls_x509_crt_init(&testcert);
   if (ret = mbedtls_x509_crt_parse_file(&testcert, "testcert.pem"))
   
     printf(" failed\n  !  mbedtls_x509_crt_parse_file returned -0x%04x\n\n", -ret);
     return ret;
   
   ret = mbedtls_x509_dn_gets(p, n, &testcert.subject);
   if (ret <= 0)
   
      printf("mbedtls_x509_dn_gets returned %02x", -ret);
      return ret;
   

【问题讨论】:

【参考方案1】:

我在上面的代码 sn-p 中犯了错误。

    我没有为指针 p 分配内存 "n" 应该是 缓冲区的最大大小

纠正这两件事后,我能够将 CN 解析为缓冲区。

谢谢

【讨论】:

p = malloc(sizeof(uint8_t)); ret = mbedtls_x509_dn_gets(p, MAX_DATA_SIZE, &clientcert.subject); MAX_DATA_SIZE = 4096

以上是关于将 X.509 证书的主题名称解析到缓冲区的主要内容,如果未能解决你的问题,请参考以下文章

如何用makecert生成数字证书!

读取 X.509 密钥或证书文件时出错:解析时出错

x509证书格式

将 PEM 编码的 X.509 证书加载到 Windows CryptoAPI

X.509 DER 格式证书到 PEM 格式

如何使用 Apache mod_ssl 变量验证 URI 格式的主题备用名称的内容?