日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

《openssl编程》之配置文件

發布時間:2024/4/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 《openssl编程》之配置文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

第八章?配置文件

8.1?概述

?Openssl采用自定義的配置文件來獲取配置信息。Openssl的配置文件主要由如下內容組成:

注釋信息,注釋信息由#開頭;

段信息,段信息由[xxx]來表示,其中xxx為段標識;

屬性-值信息,表示方法為a?=?b,這種信息可以在一個段內也可以不屬于任何段。

典型配置文件為apps/openssl.cnf(同時該文件也是openssl最主要的配置文件)。摘取部分內容如下:

?#?OpenSSL?example?configuration?file.

oid_section??=?new_oids

[?CA_default?]

dir??=?./demoCA??#?Where?everything?is?kept

certs??=?$dir/certs??#?Where?the?issued?certs?are?kept

default_days?=?365??#注意,這里是一個數字

8.2?openssl配置文件讀取

?Openssl讀取配置文件的實現源碼在crypto/conf中,主要函數定義在conf.h中。函數一般以CONF或NCONF(new?conf,新函數)開頭。本文主要介紹了新的conf函數的使用方。主要的數據結構在crypto/conf.h中定義如下:

?typedef?struct

?{

?char?*section;

?char?*name;

?char?*value;

?}?CONF_VALUE;

?section表明配置文件的段,name表示這個段中的一個屬性,value則是這個屬性的值。Openssl采用哈希表來存放這些信息,便于快速查找。

8.3?主要函數

?1)?NCONF_new

生成一個CONF結構。

?2)?CONF_free

釋放空間,以及釋放存儲在散列表中的數據。

3)?CONF_load

函數定義:LHASH?*CONF_load(LHASH?*conf,?const?char?*file,?long?*eline),該函數根據輸入配置文件名,讀取信息存入散列表,如果有錯,eline為錯誤行。

?4)?CONF_load_bio/?CONF_load_fp

根據bio或者文件句柄讀取配置信息并存入散列表。

?5)?CONF_get_section

給定段信息,得到散列表中的所有對應值。用于獲取配置文件中指定某個段下的所有信息,這些信息存放在CONF_VALUE的堆棧中。

6)?CONF_get_string

給定段以及屬性值,得到對應的字符串信息。

?7)?CONF_get_number

給定段和屬性值,獲取對應的數值信息。

?8)?CONF_get1_default_config_file

獲取默認的配置文件名,比如openssl.cnf。

8.4?編程示例

?示例1:

?#include?<openssl/conf.h>

?int?main()

?{

??CONF?*conf;

??long?eline,result;

??int??ret;

??char?*p;

??BIO?*bp;

?

??conf=NCONF_new(NULL);

?#if?0

??bp=BIO_new_file("openssl.cnf","r");

??NCONF_load_bio(conf,bp,&eline);

?#else

??ret=NCONF_load(conf,"openssl.cnf",&eline);

??if(ret!=1)

??{

???printf("err!\n");

???return?-1;

??}

?#endif

??p=NCONF_get_string(conf,NULL,"certs");

??if(p==NULL)

???printf("no?global?certs?info\n");

??p=NCONF_get_string(conf,"CA_default","certs");

??printf("%s\n",p);

??p=NCONF_get_string(conf,"CA_default","default_days");

??printf("%s\n",p);

??ret=NCONF_get_number_e(conf,"CA_default","default_days",&result);

??printf("%d\n",result);

??ret=NCONF_get_number(conf,"CA_default","default_days",&result);

??printf("%d\n",result);

??NCONF_free(conf);

??return?0;

?}

?本示例用來讀取配置文件信息,這些信息可以是字符串也可以是數字。

?

?示例2:

?NCONF_get_section的用法:

?#include?<openssl/conf.h>

?int?main()

?{

??CONF?????*conf;

??BIO??????*bp;

??STACK_OF(CONF_VALUE)?*v;

??CONF_VALUE????*one;

??int??????i,num;

??long?????eline;

??

??conf=NCONF_new(NULL);

??bp=BIO_new_file("openssl.cnf","r");

??if(bp==NULL)

??{

???printf("err!\n");

???return?-1;

??}

??NCONF_load_bio(conf,bp,&eline);

??v=NCONF_get_section(conf,"CA_default");

??num=sk_CONF_VALUE_num(v);

??printf("section?CA_default?:\n");

??for(i=0;i<num;i++)

??{

???one=sk_CONF_VALUE_value(v,i);

???printf("%s?=?%s\n",one->name,one->value);

??}

??BIO_free(bp);

??printf("\n");

??return?0;

?}

總結

以上是生活随笔為你收集整理的《openssl编程》之配置文件的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。