首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >把证书写到

把证书写到
EN

Stack Overflow用户
提问于 2018-09-06 19:15:07
回答 1查看 422关注 0票数 1

我试图在内存中编写一个X509证书到DER格式。将其写入文件是非常有效的。

我需要PEM格式的证书没有“--开始私钥--”页眉、页脚或换行符。我不知道怎么直接做所以..。我输出到der和base64编码。

这个很管用。

代码语言:javascript
复制
int X509_to_DER_file(X509 *cert) {
  int res=0;

  out = BIO_new(BIO_s_file());
  if (NULL != out) {
    if(BIO_write_filename(out, "my.der") > 0) {
      res = i2d_X509_bio(out, cert);
    }
    BIO_free_all(out);
  }
 return (tres);
}

这就不是了。它返回和错误设置正确的字节数,并似乎正确地写入内存,但结果字符串不正确(前15个左右的位置是正确的)。

代码语言:javascript
复制
char *X509_to_DER_mem(X509 *cert) {
  char *der = NULL;
  bio = BIO_new(BIO_s_mem());

  if (NULL != bio) {
    //load cert into bio
    if (0 == i2d_X509_bio(bio, cert)) {
      BIO_flush(bio);
      BIO_free(bio);
      return NULL;
    }

   der = (char *) malloc(bio->num_write + 1);
   if (NULL == der) {
       BIO_free(bio);
       return NULL;
   }

   memset(der, 0, bio->num_write + 1);
   BIO_read(bio, der, bio->num_write);
   // Appears to work put "der" is incomplete. 
   BIO_free(bio);
 }

 return der;
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-09-11 03:50:04

它返回和错误设置正确的字节数,并似乎正确地写入内存,但结果字符串不正确。

i2d_X509_bio()的结果不是(以零结尾的)字符串,而是一串字节.如果试图将它作为字符串写入文件,它可能看起来不完整,因为在到达末尾之前,您可能会在某个位置遇到一个0字节。因此,除了char *结果之外,函数X509_to_DER_mem()还必须返回组成结果的字节数。

关于内存BIO,获取其数据的另一种方法是使用BIO_get_mem_data()函数。就像这样:

代码语言:javascript
复制
char *ptr = NULL;
long len = BIO_get_mem_data(bio, &ptr);
der = malloc(len);
memcpy(der, ptr, len);

最后,你的实际问题是

我需要PEM格式的证书没有“--开始私钥--”页眉、页脚或换行符。

以DER格式编写证书似乎不能满足您的需要。This answer to another SO question解释了如何将函数PEM_read_bio()EVP_EncodeBlock()结合使用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52210793

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档