1. 程式人生 > >Openssl驗證證書的有效性

Openssl驗證證書的有效性

好久沒寫部落格了,直接上程式碼

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <openssl/x509.h>
#include <openssl/x509_vfy.h>
int LoadCert(unsigned char * szFilePath, unsigned char *pbCert, int size)
{
	int len = 0;
	if(szFilePath == NULL || pbCert == NULL || size < 128)
	{
		return -1;
	}
	FILE *fp = fopen(szFilePath, "rb");
	if ( NULL == fp)
	{
		return -2;
	}

	len = fread(pbCert, 1, size, fp);
	fclose(fp);
	return len;
}

int VerifyCert(unsigned char *pbCaCert, int nCaLen, unsigned char *pbCert, int nCertLen, unsigned char *pbCN, int size)
{
	int rv = -1;
	if(pbCaCert == NULL || nCaLen < 128 || pbCert == NULL || nCertLen < 128)
	{
		return rv;
	}

	X509 *ca = NULL;
	X509 *cert = NULL;

	X509_STORE *caStore = NULL;
	X509_STORE_CTX *ctx = NULL;
	X509_NAME *subject = NULL;
	
	OpenSSL_add_all_algorithms();

	caStore = X509_STORE_new();
	ctx = X509_STORE_CTX_new();

	ca = d2i_X509(NULL, ( const unsigned char **)&pbCaCert, nCaLen);
	if(ca == NULL)
	{
		return -2;
	}

	rv = X509_STORE_add_cert(caStore, ca);
	if ( rv != 1 )
	{
		rv = -3;
		goto EXIT_VERIFY;
	}

	cert = d2i_X509(NULL, ( const unsigned char **)&pbCert, nCertLen);
	if(cert == NULL)
	{
		rv = -4;
		goto EXIT_VERIFY;
	}

	rv = X509_STORE_CTX_init(ctx, caStore, cert, NULL);
	if ( rv != 1 )
	{
		rv = -5;
		goto EXIT_VERIFY;
	}

	rv = X509_verify_cert(ctx);
	if ( rv != 1 )
	{
		fprintf(stderr, "X509_verify_cert fail, rv = %d, error id = %d, %s\n",
		rv, ctx->error, X509_verify_cert_error_string(ctx->error));
		rv = (rv == 0 ? 1 : rv);
		goto EXIT_VERIFY;
	}
	subject = X509_get_subject_name(cert);
	if(subject)
	{
		X509_NAME_get_text_by_NID(subject, NID_commonName, pbCN, size);
	}
	rv = (rv == 1 ? 0 : rv);

EXIT_VERIFY:
	if(cert) X509_free(cert);
	if(ca) X509_free(ca);
	if(caStore) X509_STORE_free(caStore);
	if(ctx)
	{
		X509_STORE_CTX_cleanup(ctx);
		X509_STORE_CTX_free(ctx);
	}
	
	return rv;
}

int main(void)
{
	int rv = 0;
	int i = 0;
	int caLen = 0;
	int certLen =0;
	unsigned char cn[255] = {0};
	unsigned char cert[4096] = {0};
	unsigned char ca[4096] = {0};
	
	caLen = LoadCert("ca.cer", ca, 4096);
	certLen = LoadCert("Jinhill.cer", cert, 4096);
	rv = VerifyCert(ca, caLen, cert, certLen, cn, 255);
	printf("rv=%d, cn=%s\n", rv, cn);
	return 0;

}


相關推薦

Openssl驗證證書有效性

好久沒寫部落格了,直接上程式碼#include <stdio.h> #include <string.h> #include <stdlib.h> #include <openssl/x509.h> #include <o

openssl 驗證證書是否是某個CA證書籤發

int VerifyCertByIssuer(X509 *cert, X509 *issuer) {  int res = 0;  EVP_PKEY *pubkey = 0;  if (X509_check_issued(issuer, cert) != X509_V_OK

獲取數字證書相關資訊,證書有效性驗證,RSA加密和解密功能之獲取證書相關資訊

//公鑰 private PublicKey pk; /** 後臺將證書以byte陣列的形式傳入 * @param bytes,數字證書crt傳入的byte陣列 * @return */ public InfoEntity getCertificateInfo(

OPENSSL X509證書驗證

步驟: 1)初始化環境 a.新建證書儲存區X509_STORE_new() b.新建證書校驗上下文X509_STORE_CTX_new() 2)匯入根證書 a.讀取CA證書,從DER編碼格式化為X509結構d2i_X509() b.將CA證書匯入證書儲存區X509_STORE

驗證證書有效性(cryptoapi)

使用CertGetIssuerCertificateFromStore函式來驗證證書的有效性,其函式宣告如下:PCCERT_CONTEXT WINAPI CertGetIssuerCertificateFromStore( HCERTSTORE , //[in]

數字證書有效性驗證

數字證書的有效性驗證主要從三個方面: 1,數字證書有效期驗證                                                                   2,根

openssl證書驗證

name 匹配 enc 信任 key 查找 加載順序 分支管理 存在 使用openssl驗證證書鏈可以用以下命令: debian:/home/zhaoya/openssl#openssl verify -CAfile ROOT_CERT USER_CERT 其中的ROOT

openssl https證書

address world 解密 cipher nginx acer frame agen detail 今天摸索了下 HTTPS 的證書生成,以及它在 Nginx 上的部署。由於博客托管在 github 上,沒辦法部署證書,先記錄下,後續有需要方便快捷操作。本文的闡述不一

openssl 生成證書基本原理

detail 數據傳輸 它的 註釋 有一個 -i gen 所在 sig 摘自:http://blog.csdn.net/oldmtn/article/details/52208747 1. 基本原理 公司一個項目要進行交易數據傳輸,因為這個項目銀行那邊也是剛剛開始啟動,所有

使用 openssl 生成證書

安全 ssl 證書 一、openssl 簡介openssl 是目前最流行的 SSL 密碼庫工具,其提供了一個通用、健壯、功能完備的工具套件,用以支持SSL/TLS 協議的實現。官網:https://www.openssl.org/source/構成部分密碼算法庫密鑰和證書封裝管理功能SSL通信AP

使用OpenSSL生成證書並配置Https

兩種 做的 class 令行 .net 基本 我們 服務端 mage 1、密鑰、證書請求、證書概要說明 在證書申請簽發過程中,客戶端涉及到密鑰、證書請求、證書這幾個概念。我們以申請證書的流程說明三者的關系。客戶端(相對於CA)在申請證書的時候,大體上有三個步驟: 第一步:

Openssl生成證書流程

Openssl生成證書流程Openssl生成證書流程偶然想到在內網配置https,就梳理了下利用openssl與ca生成證書的過程。生成過程分為服務端跟客戶端,這裏我在一臺上測試。一.介紹CA是Certificate Authority的縮寫,也就是認證中心。CA的功能有:頒發證書,更新證書,撤銷證書和驗證證

【本地服務器】利用openssl生成證書

.html num href 創建證書 inf blog article nop cmd (一)下載openssl軟件,解壓,進入bin目錄 下載地址 (二)1.在當前bin目錄,按住shift鍵右擊,選擇"在此處打開命令窗口" 2.打開

openssl生成證書 - CSDN部落格

大家都可以生成公鑰、私鑰對,無法確認公鑰對到底是誰的。 如果能夠確定公鑰到底是誰的,就不會有這個問題了。例如,如果收到“黑客”冒充“伺服器”發過來的公鑰,經過某種檢查,如果能夠發現這個公鑰不是“伺服器”的就好了。 為了解決這個問題,數字證書出現了,它可以解決我們上面的問題。先大概看下什麼是數字證書

Emailcamel.Com - 免費線上批量驗證郵箱有效性

  EmailCamel.com- 免費線上批量驗證郵箱有效性,支援Excel匯入、報告匯出 準確率 如果對方伺服器沒有拒絕驗證,則都可以驗證!海外分散式伺服器 多臺海外伺服器,保證Gmail等國外郵箱,不會因為'牆'的原因而無法驗證!驗證快速 同域郵箱持久化技術!雲端儲存 驗

靈活多變的keytool和openssl生成證書,應用tomcat和nginx

靈活多變的keytool和openssl生成證書,應用tomcat和nginx 文章目錄 前言 什麼是證書?為什麼要使用證書? 證書格式轉換 證書格式 keytool是什麼? 主要格式 test.

如何利用OpenSSL生成證書

此文已由作者趙斌授權網易雲社群釋出。 歡迎訪問網易雲社群,瞭解更多網易技術產品運營經驗。 一、前言 最近為了測試內容分發網路(Content Delivery Network,簡稱 CDN)新增的新功能,支援HYTTPS安全加速功能,需要對證書的有效性進行驗證,於是乎需要自己生成合法的、非法的、過期的證書。

openssl轉換證書及檢視證書資訊

title: openssl轉換證書及檢視證書資訊 date: 2018-1-4 16:29:00 categories: - Android tags: - openssl - shell 生成客戶端檔案 1.生成客戶端key openssl genrsa -

Java PDF數字簽名(二) - 驗證簽名有效性

上一篇文章介紹了如何在Java中給PDF文件新增數字簽名,這篇文章接著介紹如何驗證數字簽名的有效性。 步驟: 1.建立一個Java project,並新增一個class VerifySignature.JAVA 2.下載Free Spire.PDF for JAVA包並解壓縮,然後從

openssl 檢查證書是否過期

echo | openssl s_client -servername ×××w.youqiantu.com -connect ×××w.youqiantu.com:443 2>/dev/null |