Tag: x509

如何从X509中删除扩展程序?

我正在创建一个api来修改C中的X509证书,我想添加一种删除扩展的方法(例如subjectNameAlt )。 我如何通过OpenSSL API执行此操作?

Windows 2008R2 CA和OpenSSL CSR:解析CSR ASN1错误值时遇到错误

我正在使用OpenSSL C API来构建CSR。 代码如下: static void seedPRNG() { const int openSSLseedsize = 128; uint8_t *openSSLseed = NULL; openSSLseed = malloc(openSSLseedsize * sizeof(uint8_t)); //printf(“%d\n\n”, openSSLseedsize); // random number generator SecRandomCopyBytes(kSecRandomDefault, openSSLseedsize, openSSLseed); for (unsigned i = 0; i < openSSLseedsize; i++) { printf("%d", openSSLseed[i]); } printf("\n\n\n\n"); //seed openSSL random RAND_seed(openSSLseed, 128); } // Parameter settings for […]

Openssl:在SSL_CTX_load_verify_locations API中使用CApath参数时,证书validation失败

我正在尝试与服务器计算机建立TLS连接。 我使用openssl CLI命令创建了根CA证书和服务器证书。 我创建了服务器证书,其通用名称与其IP地址相同。 根CA证书的通用名称是服务器的FQDN。 我正在使用openssl库API建立与服务器的连接。 我正在使用API int SSL_CTX_load_verify_locations(SSL_CTX *ctx, const char *CAfile, const char *CApath) 用于设置CA文件查找路径。 当我使用CAfile参数指定我的CA文件的路径时,一切正常,将CApath参数保留为NULL。 但是,如果我使用CApath参数指定包含CA文件的目录的路径,将CAfile参数保留为NULL,则由于证书validation错误,连接将失败。 当我使用wireshark捕获数据包时,我发现我的客户端代码正在从服务器发送“服务器问候”的TLS响应“未知CA”。 我使用了在成功连接中使用的相同CA证书文件。 根据我在探索openssl库源代码时的观察,我推断,在我的情况下,CA文件不被认为是有效的,因此由于某些未知原因而未被库API加载。 有人可以告诉我原因,如果可能的话,可以解决这个问题吗?

使用openssl库获取x509证书哈希

我目前正在开发一个应用程序,它使用openssl库(libcrypto)生成证书。 现在我必须得到已经存在的证书的哈希值。 当我使用我的终端时,我可以通过使用生成哈希值 openssl x509 -hash -in cert.pem -noout 输出:01da0e2b 这是我的代码,我尝试使用C中的库生成哈希值。 X509 *cert = NULL; FILE *fp = fopen(currentCert.UTF8String, “r”); PEM_read_X509(fp, &cert, NULL, NULL); long hash = X509_subject_name_hash(cert); char *mdString = malloc(sizeof(long)); sprintf(mdString, “%lx”,hash); printf(mdString); 产量:1817886a 但实际上我的输出是不同的。 有谁知道我做错了什么?

X.509v3 ASN.1到C数据结构

我正在尝试在C(OpenSSL)中创建X509代理证书请求(ProxyCertInfo扩展RFC3820 ),但我无法弄清楚应该如何定义ProxyCertInfo的数据结构。 RFC定义ASN.1语言如下: PKIXproxy88 { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) id-mod(0) proxy-cert-extns(25) } DEFINITIONS EXPLICIT TAGS ::= BEGIN — EXPORTS ALL — — IMPORTS NONE — — PKIX specific OIDs id-pkix OBJECT IDENTIFIER ::= { iso(1) identified-organization(3) dod(6) internet(1) security(5) mechanisms(5) pkix(7) } — private certificate extensions id-pe OBJECT IDENTIFIER ::= { id-pkix […]

如何将subjectNameAlt扩展名添加到X509_REQ?

我正在创建一个将由我的服务器处理的CSR。 它需要设置subjectNameAlt,以便服务器可以处理它。 我进行了广泛的搜索,并且只发现了如何使用普通的X509证书,而不是X509_REQ。 我怎么能这样做(使用C和OpenSSL。即我需要相当于X509_get_ext_d2i但是X509_REQ )?

如何计算X.509证书的SHA-1指纹?

我正在尝试从头开始实现X.509证书生成器(我知道现有的,但我还需要另一个)。 我无法理解的是如何计算证书的SHA-1(或任何其他)指纹。 RFC5280表示签名函数的输入是DER编码的tbsCertificate字段。 不幸的是,我计算的哈希值与OpenSSL产生的哈希值不同。 这是一个循序渐进的例子。 使用OpenSSL的x509工具生成证书(以二进制DERforms, 而不是 ASCII PEM) 使用openssl x509 -fingerprint计算其SHA-1哈希值 使用dd(或其他任何东西)提取TBS字段并将其存储在单独的文件中; 使用sha1sum实用程序计算其哈希值 现在,我在第2步和第3步得到的哈希值是不同的。 有人可以给我一个提示我可能做错了吗?

如何在C中validationX509证书

我有X509格式的证书。 这是函数中的输入参数。 我想做的是validation证书的有效性。 怎么做到呢? X509_verify_cert(); 我找到了这个function,但这不接受X509 *证书,它接受X509_store而我只有一个X509。 最诚挚的问候。

如何以编程方式从证书中提取信息?

我有一个生成的证书,但我希望能够从证书中提取信息,例如国家,有效性,公钥等。 我必须将从证书中重新获得的这些信息与我在C程序中存储的其他信息进行比较。 我知道如果我使用这样的函数,它会打印出证书信息: void print_certificate(const char* cert) { X509 *x509 = NULL; BIO *i = BIO_new(BIO_s_file()); BIO *o = BIO_new_fp(stdout,BIO_NOCLOSE); if((BIO_read_filename(i, cert) <= 0) || ((x509 = PEM_read_bio_X509_AUX(i, NULL, NULL, NULL)) == NULL)) { printf("Bad certificate, unable to read\n"); } X509_print_ex(o, x509, XN_FLAG_COMPAT, X509_FLAG_COMPAT); if(x509) X509_free(x509); } 但我想要的只是信息的某些部分。 怎么做到呢? 谢谢

使用OpenSSL API以编程方式validation证书链

这与其他问题非常相似,但我所看到的问题要么没有答案,要么也不会问同样的问题。 我有一个自签名CA证书,以及使用该CA证书签名的另外两个证书。 我很确定证书是正确的,因为’openssl verify’有效: $ openssl verify -CAfile ca.pem server.pem server.pem: OK (以上是从记忆中,我没有它们在我面前,所以它可能稍微偏离)。 现在我想以编程方式validation证书。 我有一个实用函数,下面是伪代码: int verify_cert(X509 *cert, X509 *cacert) { int ret; X509_STORE *store; X509_STORE_CTX *ctx; store = X509_STORE_new(); X590_STORE_add_cert(store, cacert); ctx = X509_STORE_CTX_new(); X509_STORE_CTX_init(ctx, store, cert, NULL); ret = X590_verify_cert(ctx); /* check for errors and clean up */ } 我的问题是上面的代码总是返回“找不到发行者证书”。 我做错了什么? 我相信我正在创建一个新的商店,添加cacert,创建一个新的上下文,并使用指向包含CA的商店的指针将要validation的子证书添加到上下文中。 我显然做错了什么,但我不确定是什么。 […]