如何在OpenSSL中打开序列化的.Net X509Certificate2?

如何在OpenSSL中打开序列化的.Net X509Certificate2?,.net,openssl,certificate,x509certificate,x509certificate2,.net,Openssl,Certificate,X509certificate,X509certificate2,我需要使两个软件互操作。一个是.NET中的webservice,它返回X509Certificate2实例的原始二进制数据,以Base64编码。另一个是android应用程序,它可以使用OpenSSL来使用从Web服务接收的二进制证书 但是,OpenSSL始终答复数据不是有效的证书格式。我曾尝试在适用的PEM页眉和页脚中包装Base64字符串,但没有效果 有没有人对这种互操作性有经验?此方法将X509Certificate2转换为C#中的PEM格式: 此方法使用OpenSSL解析C中PEM编码的

我需要使两个软件互操作。一个是.NET中的webservice,它返回X509Certificate2实例的原始二进制数据,以Base64编码。另一个是android应用程序,它可以使用OpenSSL来使用从Web服务接收的二进制证书

但是,OpenSSL始终答复数据不是有效的证书格式。我曾尝试在适用的PEM页眉和页脚中包装Base64字符串,但没有效果


有没有人对这种互操作性有经验?

此方法将X509Certificate2转换为C#中的PEM格式:

此方法使用OpenSSL解析C中PEM编码的证书:

X509* parse_pem_cert(const char* buffer, int buffer_len)
{
    X509* cert = NULL;
    BIO* bio = NULL;

    if ((NULL == buffer) || (buffer_len < 1))
        return NULL;

    bio = BIO_new_mem_buf((char *) buffer, buffer_len);
    if (NULL == bio)
        return NULL;

    cert = PEM_read_bio_X509(bio, NULL, NULL, NULL);
    if (NULL == cert)
    {
        BIO_free(bio);
        return NULL;
    }

    BIO_free(bio);
    return cert;
}
X509*解析pem证书(常量字符*缓冲区,整数缓冲区)
{
X509*证书=空;
BIO*BIO=NULL;
if((NULL==缓冲区)| |(缓冲区长度<1))
返回NULL;
bio=bio_new_mem_buf((char*)缓冲区,缓冲区长度);
如果(NULL==bio)
返回NULL;
cert=PEM_read_bio_X509(bio,NULL,NULL,NULL);
如果(空==证书)
{
不含生物素(BIO);
返回NULL;
}
不含生物素(BIO);
返回证书;
}
X509* parse_pem_cert(const char* buffer, int buffer_len)
{
    X509* cert = NULL;
    BIO* bio = NULL;

    if ((NULL == buffer) || (buffer_len < 1))
        return NULL;

    bio = BIO_new_mem_buf((char *) buffer, buffer_len);
    if (NULL == bio)
        return NULL;

    cert = PEM_read_bio_X509(bio, NULL, NULL, NULL);
    if (NULL == cert)
    {
        BIO_free(bio);
        return NULL;
    }

    BIO_free(bio);
    return cert;
}