密碼學專題 openssl的基本概念

配置文件

  • 配置文件是OpenSSL的一個基礎結構組件,OpenSSL使用一組稱為OpenSSLCONF的函數來讀取OpenSSL配置文件的信息。OpenSSL提供的主配置文件是opensl.cnf,它集成了OpenSSL所要使用的配置文件選項的大部分內容。此外,OpenSSL還提供了其他一些部分的配置文件,用于專門配置證書請求或者X.509v3證書的擴展項。
  • OpenSSL的配置文件使用字段的概念分成不同的部分。一般來說,每個字段的開始使用[Section_Name]來標識,直到下一個字段開始或者到達文件結尾為一個字段的結束。字段的名字可以由字符、數字或者下劃線組成。需要注意的是,OpenSSL的第一個字段是比較特殊的,它不像其他的字段有名字和類似[Section_Name]的開頭。OpenSSL第一個字段被設置為OpenSSL的默認字段,當OpenSSL CONF函數要讀取配置文件數據的時候,首先會根據字段的名字去查找相應的字段,如果沒有找到,則會定位到默認的字段,也即第一個字段。每個字段包含一組不定數量的變量名和值域數據對,它們的形式如下: 變量名 = 變量值
  • 支持 \n \r 等轉義符號?
  • 使用雙引號 引號內的空格不會被忽略;如果是?變量名 = 變量值的方式 ,變量值前面的空格會被忽略

  • 支持?變量值域還支持其他變量值的展開

  • 默認值一定要在變量展開之前定義,否則無效

  • ?openssl.cnf是OpenSSL提供的主配置文件,它的結構和語法完全遵循上述介紹的OpenSSL配置文件的結構和語法。一般來說,它位于OpenSSL軟件包的apps目錄下,讀者可以使用普通的文本瀏覽工具打開和編輯該文件。目前openssl.cnf用于req、ca和x509等指令中,所有使用openssl.cnf的指令,都是通過config選項來指定配置文件,如果你不指定,默認的就是openssl.cnf文件。
  • 當然,并非任何時候都能成功找到opensl.cnf文件,這取決于你是否合理編譯和安裝了OpenSSL。openssl.cnf文件的內容包括了三大部分:默認的文件配置、證書請求配置及證書簽發配置。事實上,OpenSSL的配置文件應用遠遠不止于此,你甚至可以在使用OpenSSL函數庫的時候使用這種方便的配置機制。在后面的章節中,你還會看到如何使用配置文件靈活配置X.509證書的擴展項。

配置文件中的通用變量配置

  • openssl.cnf文件配置了一些可能用到的通用變量,這些變量數量很少,基本上都是位于openssl.cnf文件的主字段部分即默認字段部分

隨機數默認文件

HOME=.
RANDFILE=$ENV::HOME/.rnd
  • RANDFILE變量是用來設置可能用到的隨機數文件,這個文件通常用作生成隨機數的種子文件。隨機數在密碼學中具有重要的意義,通常,隨機數的好壞可以對密鑰的安全性產生很大的影響。大家可以看到,在RANDFILE變量之前還定義了HOME變量,這主要就是為了防止環境變量ENV中不存在HOME變量(如Windows系統)的時候可能導致的錯誤

擴展對象的定義

  • 擴展對象定義有時候可能要使用一些擴展對象定義,比如在使用X.509證書的擴展項的時候,這些擴展項的對象可能在OpenSSL中并沒有進行定義,那么就要對擴展對象進行定義。對擴展對象的定義通常包含三個部分:對象數字形式的OID、對象簡稱和對象詳細描述
  • OpenSSL以兩種方式定義擴展對象:擴展對象文件方式在配置文件中使用特定字段方式
  • 擴展對象文件的指定使用OpenSSL默認字段中的oid_file變量,形如下面的格式:
  • oid_file = $ENV::HOME/.oid
  • 打開openssl.cnf文件可以看到,在默認的openssl.cnf文件中,該語句是被注釋掉的。
  • 其中的.oid即為擴展對象定義文件
  • 擴展對象定義文件每一行定義一個對象,格式一般如下:

  • 擴展對象還可以在配置文件中的一個字段中定義,這個特定的字段通過oid_section變量來指定,變量值為字段名。其格式如下:?
  • oid_section = new_section
  • 讀者從默認的openssl.cnf中可以看到,其沒有定義任何擴展對象,如果要使用擴展對象,讀者可以參照上面的方法自己定義新的對象。
  • 擴展對象字段的變量對通常由擴展對象簡稱和擴展對象OID組成,在這種方式中,擴展對象詳細描述跟擴展對象簡稱是相同的,下面是一個擴展對象使用字段定義的例子:
[new_section]
oid_ext1 = 2.99999.1
oid_ext2 = 2.99999.2

配置文件中的證書請求配置

  • (1)證書請求主配置字段在申請證書之前,通常要生成符合PKCS#10標準的證書請求封裝格式。
  • OpenSSL的req指令實現了產生證書請求的功能,其相關選項的信息就采用OpenSSL配置文件來進行設置。
  • OpenSSL中證書請求的配置分成幾個字段,包括一個基本字段和幾個附屬的字段。OpenSSL配置文件中名為req的字段是證書配置請求的基本字段也是使用證書請求配置的入口,而其他附屬字段都是以這個字段作為引導的。目前,默認openssl.cnf文件證書請求配置字段已有的選項如下。
[req]
default_bits = 1024
default_keyfile = privkey.pem
distinguished_name = req_distinguished_name
attributes = req_attributes
x509_extensions = v3_ca
input_password = secret
output_password = secret
string_mask = nombstr
req_extensions = v3_req
  • 上述選項并非所有都使用了,比如input_password和output_password就已經被注釋。
  • 因為req指令還可以生成RSA密鑰對,所以default_bits選項指定了默認生成密鑰的長度,default_keyfile則指定了默認的私鑰輸出保存文件
  • input_password和output_password分別提供了默認的輸入私鑰保護口令和輸出私鑰保護口令。
  • string_mask選項則是設定了證書請求的信息字段的字符串類型。
  • distinguished_name,attributes,x509_extensions和req_extensions的值域都是字段名,指定了包含相應信息的字段名字。事實上,與證書請求相關的配置文件選項遠遠不止這些,如表所示列出了OpenSSL配置文件中目前支持的證書請求參數及其意義,這些參數基本上跟req指令中同名的參數選項作用是相同的,通常如果req指令設置了同名選項,則配置文件的默認值將不會被使用,否則就使用配置文件的默認值

  • 從表可以看到,雖然證書請求字段支持oid_file,oid_section及RANDFILE等參數,但是默認的opensl.cnf文件并沒有這些選項,根據使用OpenSSL配置文件的規則,配置文件的讀取函數將使用主字段也就是配置文件默認字段中同名的參數。

(2)特征名稱字段

  • 特征名稱字段由req字段中的distinguished_name指定,它包含了用戶的主要信息,如國家、省份、城市、組織及名字等信息,如果兩個證書的特征名稱字段所有參數值都相同,一般就可以看成是同一個用戶,所以該字段所有信息的總和稱為“特征名稱”。特征名稱字段允許的變量名可以是任何對象的簡稱或詳細描述名稱。
  • 有些對象在OpenSSL里面已經編譯進去,比如commonName,countryName,localityName,organi-zationName,organizationUnitName和stateOrPrivinceName。此外,emailAddres,name,surname,givenName,initials和dnQualifier等也在OpenSSL里面做了定義。
  • 特征名稱字段還可以包含自定義的擴展對象名,這些擴展對象可以在擴展對象文件(oid_file)或者擴展對象字段(oid_section)中定義
  • 一般來說,擴展對象的值類型都被默認為是DirectoryString。
  • 根據證書請求配置字段中變量prompt的值的變化,特征名稱字段變量定義的格式有兩種。如果prompt的值設為no,那么特征字段中每個條目只是簡單包含了變量名和對應的變量值,通常有如下形式:
CN = My Name
OU = My Organiaztion
emailAddress = someone@somewhere.org
  • 在這種情況下,不會要求用戶再輸入這些對象的域值,而只是簡單地將配置文件中相應的值復制過去。
  • 相反,如果prompt沒有定義或者其值沒有設置為no,那么特征名稱字段一個變量域的屬性就會包含輸入信息的屬性,一般包含了類似下面的格式:?
filedName = "prompt"
filedName_default = "default filed vlaue"
filedName_min = 2
filedName_max = 4
  • 其中,fieldName是對象的簡稱或者詳細描述,如CN或者commonName。
  • “prompt”是要求用戶輸入變量值的時候顯示的提示信息;
  • fieldName_default的值定義的是默認的變量值;
  • fieldName_min和fieldName_max定義了變量值字符串最小的長度和最大的長度。
  • 事實上,這四個項目除了第一個,其他都是可選的。對一個變量來說,用戶如果沒有輸入任何信息,會使用默認的變量值;如果定義了默認變量值但是用戶輸入了“.”號,該變量域就會被忽略和取消,不會被包含在證書請求中;如果用戶沒有輸入任何信息,也沒有在配置文件定義默認值,那么該變量域也會被忽略和取消。
  • 輸入的變量值字符串的長度必須在配置文件定義的最小長度和最大長度之間,這給一些變量值做了額外的限制,比如國家(C),其值一般就定義為2個字符串。那么如果輸入的值不是兩個字符串長度,就會被拒絕接受。有些變量,比如organizationName,在特征名稱字段可能會不止一個,但是,OpenSSL的配置文件只會加載同名變量的最后一個變量。為了避免這種情況可能導致的數據丟失,OpenSSL規定了在特征名稱字段中,如果字符后面跟著點號(“.”),那么該字符就被忽略。比如a.fieldName和b.fieldName在OpenSSL中都認為是名為fieldName的對象。這樣,就可以將相同變量名出現多次的情況區別開來,而不會因為相同被OpenSSL配置文件的讀取函數忽略,從而保證多個變量值的情況能夠被正確輸入到證書請求的特征名稱中。例如對于有兩個organizationName變量的情況,可以使用如下的格式:0.organizationName? 1.organizationName

(3)證書請求屬性字段

  • 證書請求屬性字段由req字段中的atributes變量指定,它定義了一些在CA簽發證書的時候可能用到的屬性值,現在典型的應用字段是challengePassword和unstructured-Name。chalengePasword一般是在用戶獲取CA簽發的證書的時候驗證用戶時使用的,而unstructuredName則是一個可選的別名。這些屬性目前對于OpenSSL的應用程序來說都被忽略了,但是有些CA是要求這些屬性的。證書請求屬性字段的格式跟特征名稱字段的格式相同,也會受到prompt的值的影響,使用方法可以參考特征名稱字段的格式介紹。

(4)證書請求擴展字段

  • 證書請求擴展字段由req字段中的req_extensions變量指定,它定義了要加入到證書請求中的擴展項。該字段的格式跟證書擴展字段的格式基本是一致的,目前主要用來定義X.509v3的擴展項。

配置文件中的證書簽發配置

  • (1)CA主配置字段配置文件中CA主配置字段設置了OpenSSL的CA指令默認的選項值,對CA指令的行為有很大的影響。不過,CA主配置字段并不是OpenSSL配置文件中名為“ca”的字段,ca字段只是通過default_ca變量給OpenSSL應用程序提供了CA主配置字段的入口,即告訴CA指令配置文件中哪個字段是用作CA主配置字段,比如在默認的opensl.cnf文件中,CA主配置字段就是CA_default字段。當然,應用程序(如CA指令)也可以通過自己的選項.name來選擇CA主配置字段。
  • CA主配置字段的信息主要包括CA指令配置文件、CA簽發證書的限制和策略,以及指定CA擴展項字段。一個相對比較完整的CA主配置字段看起來如下。

  • 一個實際的 CA 主配置字段,不一定要出現所有這些變量。這些變量的作用跟同名應用指令的選項的作用經常是一樣的,但是指令選項的優先級一般來說比配置文件的要高。

  • 如表所示是目前支持的CA主配置字段參數

?

  • 表中,oid_file和oid_section參數一般都不會出現在CA主配置字段中,也就是說,一般都使用配置文件默認字段中的oid_file和oid_section的值。default_startdate和default_enddate的格式是YYMMDDHHMMSSZ,是UTCTime結構,表示的是標準的格林威治時間。各個位的意義如表所示。比如2003年8月6日上午9時30分44秒,則表示為:030806093044Z。?

?(2)請求信息匹配策略字段

  • 證書請求信息的匹配策略字段由CA主配置字段的policy參數指定。該字段包含了一組跟證書特征名稱(DN)域相關的變量。變量的名稱是DN域對象的名稱,變量值可能為optoinal,supplied或match。下面是一個匹配策略字段的實例:?
[policy_match]
countryName = match
stateOrProvinceName = match
organizationName = match
organizationUnitName = optional
commonName = supplied
emailAddress = optional
  • 如果在匹配字段中一個變量的值是match,那么,該變量在證書請求中的值必須跟CA證書相應的變量值完全相同,否則就會被拒絕簽發,比如上述的conutryName的匹配策略是match,那么如果CA證書的countryName(C)是“CN”,那么證書請求中的countryName就也必須要求是“CN”。
  • 如果在匹配策略字段中一個變量的值是supplied,那么證書請求中必須提供該變量值,否則也會被拒絕簽發,但是變量值可以不同
  • 如果在匹配策略字段中一個變量的值是optional,那么證書請求中可以提供該變量,也可以沒有該變量。一般來說,如果證書請求DN域中出現了證書請求匹配策略中沒有的變量,簽發證書的時候會被自動刪除。但是,如果使用了preserve選項并設置其值為yes,或者在CA指令中使用了-preserveDN選項,則匹配策略中沒有的變量也會被保留下來。

(3)擴展項字段

  • CA主字段中包含了兩個指向擴展項字段的變量:x509_extensions和crl_extensions,它們都指向一個包括了X509v3證書擴展項信息的字段,從格式和本質上來說,它們都是統一的,都是為了添加X509v3證書擴展項功能的。與此相同的還有證書請求配置中的req_extensions變量指向的證書請求擴展字段。

配置文件中X.509v3證書擴展項

1.擴展項字段應用概述

  • X.509v3證書已經得到了廣泛應用,其最大的特色就是增加了擴展項的支持。在OpenSSL中,除了可以在指令中使用參數來指定擴展項的配置,更通常使用的是在配置文件中配置擴展項的各個參數。
  • X.509v3擴展項不僅僅可以添加到證書中,也可以添加到證書請求和證書吊銷列表(CRL)中。在OpenSSL配置文件中,針對不同的應用,有不同的X.509v3擴展項字段的入口。如果要在使用ca指令的時候添加證書擴展項字段,那么應該使用CA主配置字段的x509_extensions變量;
  • 如果要在證書請求中添加證書擴展項字段,那么就應該使用證書請求配置主字段的req_extensions變量;如果要在CRL中添加證書擴展項,那么就應該使用CA主配置字段的crl_extensions變量。此外,OpenSSL的x509指令使用的證書擴展項字段是以配置文件默認字段的extensions變量為入口的,而證書請求配置主字段的x509_extensions變量則為使用req指令簽發自簽名證書提供了擴展項字段的入口。

2.擴展項字段變量的格式

  • 擴展項字段的變量的格式是相同的,都具備如下的基本格式
  • extension_name = [critiacl, ] extension_options
  • 上述的critical是可選的,一旦變量標記為critical,即標記該選項為關鍵選項,那么要求就會非常嚴格。理論上,任何客戶端一旦不能理解標記了critical的擴展項就應該將該證書視為無效,所以在使用critical的時候要非常謹慎。有些不規范的軟件甚至會將任何包含了critical標記的證書都視為無效。

擴展項有三種基本的類型:字符串擴展項、多值擴展項和原始擴展項。

  • 字符串擴展項很簡單,它的值域僅僅包含一個字符串作為值或者作為行為方式的描述,比如: nsComment = "This is a Comment"
  • 多值擴展項有兩種方式:短型和長型。短型的多值擴展項值域是一系列名字和對應值的列表,中間用逗號隔開,而名字和值中間使用“:”隔開,比如:
  • basicContraints = critical,CA:true,pathlen:1
  • 長型的多值擴展項允許將真正的值域放置在單獨的字段中,比如上述的變量,也可以寫成如下的形式:
basicContraints = critical,@bs_section
[bs_section]
CA = true
pathlen = 1
  • 短型的多值擴展項和長型的多值擴展項是完全等價的,使用任何一種都可以。但是, 有時候值域里面一個變量會出現兩次,這種情況下對長型的多值擴展項就需要做一些處 理。比如下面的多值擴展項變量:
  • subjectAltName = email:dragonking@here,email:dragonking@there
  • 值域中email變量出現了兩次,如果用長型的多值擴展項方式表示,就不能簡單把它們列舉成:
subjectAltName = @alt_section
[alt_section]
email = dragonking@here
email = dragonking@there
  • 如果以上述的方式表示,那么alt_section字段的第一個email變量就會被OpenSSL的配置文件讀取函數忽略,因為根據OpenSSL的規則,同一字段出現同名變量,那么就只有最后一個有效。所以為了避免這種請求,通常我們采取下面的形式:
subjectAltName = @alt_section
[alt_section]
email.0 = dragonking@here
email.1 = dragonking@there
  • 這樣,我們就能保證同名變量的所有信息都能正確加入到證書相應的域中。原始擴展項顧名思義,它采用了原始的數據(如對象的OID)而不是可讀數據來表示變量名或變量值,該方式也支持多個值,中間可以用“,”分開。這種方式的使用應該要非常謹慎,否則就可能導致無效的變量對象聲明。
  • 比如:certificatePolicies = 1.2.3.5,1.1.3.4
  • 甚至還可以在變量域中使用DER編碼的特定對象OID,這需要通過DER標識來聲明,
  • 比如:certificatePolicies = 1.2.3.5,1.1.3.4
  • DER后面的數據是經過DER編碼并使用十六進制表示的對象OID,除非不得已而為之,否則難以令人理解

3,擴展項字段變量種類

  • X.509v3證書的擴展項的主要目的是為了能夠對證書和其相關私鑰的用途和使用方法做出限制,從而提高證書的可管理性。
  • 下面將以分類的方式來介紹目前支持的擴展項變量,這些變量名稱如果是“ns××××”的形式,則一般是Netscape定義的擴展項,而不是這個形式的則一般是PKIX定義的擴展項。
  • 表格列出了目前OpenSSL配置文件支持的擴展項。事實上,這里列出的擴展項只是OpenSSL支持的在配置文件中設置的選項,并不是OpenSSL支持的擴展項的全部,有些選項OpenSSL是支持顯示的,但是并不能在配置文件中設置,比如私鑰使用周期、CRL序列號和CRL說明等。

?

(1)描述字符串型的擴展項

  • 這種類型的擴展項變量直接使用一個字符串給變量賦值,這樣的擴展項變量包括:nsBaseUrl,nsRevocationUrl,nsCaRevocationUrl,nsRenewalUrl,nsCaPolicyUrl,nsSslServerName和nsComment。這些擴展項從名字可以知道,基本上是給出了一些跟證書相關的URL的信息,這些擴展項都是Netscape定義的。不過,目前很多證書實際上并沒有使用這些選項。下面是一個這種擴展項在配置文件中的例子:?
  • nsComment = "DragonKing Generated Certificate"

(2)證書類型(nsCertType)擴展項

  • nsCertType是Netscape定義的指定證書用途的擴展項,它可選的值包括:client,server,email,objsign,reserved,slCA,emailCA和objCA。
  • nsCertType值域可以為這些值的一個或者多個。這些值所代表的意義如表所示。

  • 例如,如果要簽發一個只用來簽名的用戶證書,那么nsCertType設置應該如下: NsCertType = objsign
  • 如果要簽發的是一個普通用戶證書,并且是用于服務器端的,可以將nsCertType的值設置如下:?nsCertType =?objsign,email,server
  • 如果你要使用的是一個CA證書,并且該CA證書可以用來簽發任何用途的證書,那么你的定義應該如下:?nsCertType = objCA,emailCA,sslCA

(3)密鑰用途(keyUsage)擴展項

  • keyUsage是PKIX定義的用于限制證書中密鑰用途的擴展項
  • 事實上,它跟nsCertType的功能基本上是相同的,都是為了限制證書用途。
  • keyUsage可選值包括:digitalSignature,nonRepudiation,keyEncipherment,dataEncipherment,keyAgrement,keyCertSign,cRLSign,encipherOnly和decipherOnly。
  • keyUsage的值可以為上述值的一個或者多個,值域中各個參數的意義詳見表

  • 例如,如果要指定證書中的密鑰只能用來進行加密操作,并且標記該擴展項為關鍵擴展項,則設置應該如下:
  • keyUsage = critical,keyEncipherment,encipherOnly

(4)基本限制(basicConstraints)擴展項

  • basicConstraints是PKIX定義的證書擴展項,在OpenSSL配置文件中,它是一個多值型擴展項,它的值域包括兩部分:CA參數和pathlen參數。
  • CA參數的值為TURE或者FALSE,如果CA參數值為TRUE,指明該證書是一個CA證書,即可以用來簽發別的證書的證書;
  • 如果CA的值為FALSE,那么表示證書是一個最終用戶證書,不能作為CA證書。下面的配置表明是一個CA證書:?
  • basicConstraints = CA:TRUE
  • pathlen參數值是整數,只對CA證書有效,也就是說,只有CA值為TRUE的時候才有效。它指明了從該CA開始下面還可以出現多少級CA證書。所以,如果你設定一個CA 證 書 的 pathlen 為 0, 設置如下 : basicConstraints = CA:TRUE,pathlen = 0? ?那么表明該CA證書只能簽發最終用戶證書而不能簽發更低級別的CA證書。
  • PKIX規定該擴展項必須標記為關鍵選項,當然,你理論上也可以不這樣做。有效的CA證書一般應該標記為CA值為TRUE,而最終用戶證書CA值一定不能設置為TRUE,否則就很容易導致混亂。
  • 下面的例子是一個標記該擴展項為關鍵擴展項的最終用戶配置例子:basicConstraints = critical,CA:FALSE

(5)擴展密鑰(extendedKeyUsage)擴展項

  • extendedKeyUsage允許用戶添加額外的密鑰應用信息,用戶可將自己定義的對象和相應的信息添加到extendedKeyUsage列表中。extenedKeyUsage的值域是多個代表特定意義的數據對象的列表,可以為對象的簡稱,也可以為對象的數字形式OID。
  • 目前PKIX,Netscape和Microsoft都定義了自己的擴展密鑰擴展對象,在表中列出了OpenSSL目前支持的擴展對象。
  • 下面是兩個使用extendedKeyUsage擴展項的例子
  • extendedKeyUsage = critical,codsSigning,1.2.3.4
  • extendedKeyUsage = nsSGC,msSGC

(6)主體密鑰標識(subjectKeyIdentifier)擴展項

  • 主體密鑰標識用于在證書主體擁有多個密鑰集的時候指定密鑰屬于哪個密鑰集。subjectKeyIdentifier參數值目前有兩種,一種是以十六進制字符串的方式直接給定主體密鑰標識,這種方式現在基本上不使用了;另外一種是給定值hash,這樣,就會根據PKIX的規定生成合適的主體密鑰標識,如下面的例子:?

  • subjectKeyIdentifier = hash

(7)驗證機構密鑰標識(authorityKeyIdentifier)擴展項

  • 驗證機構密鑰標識用于構造證書鏈的時候標識簽發機構的證書和密鑰,證書中的驗證機構密鑰標識包括三個部分:密鑰ID(keyID)、驗證機構DN和CA證書序列號
  • KeyID在驗證機構使用多對密鑰的時候能起到區別的作用。在OpenSSL中,authorityKeyIdentifier擴展項的參數值域有兩個:keyid和issure,兩個參數都可選的取值為“always”。下面是一些應用形式:
  • authorityKeyIdentifier = keyid,issure:always
  • authorityKeyIdentifier = keyid:always
  • 如果給定keyid,那么CA簽發證書的時候就會復制CA證書的主體密鑰標識到新簽發的證書中,如果keyid取值always,則復制失敗的時候就拒絕簽發證書。
  • 給定issure將告訴CA簽發證書的時候復制CA證書的DN和序列號到新簽發證書中,一般來說,雖然給定了issure值,但是只有keyid出顯但復制主體密鑰失敗或者keyid沒有給定的情況下才會執行CA證書的DN和序列號的復制操作。
  • 如果isure給定了always值,則不論在什么請求下都執行其定義操作。

(8)主體別名(subjectAltName)擴展項

  • 主體別名為證書提供了形式更加靈活的命名方式,理論上可以包含IP地址、URL、電子郵件及域名等信息作為主體別名。目前,就OpenSSL來說,在配置文件中支持的值包括:email(E-mail地址),URL(全球資源定位地址),DNS(DNS域名),RID(已注冊對象標識)和IP(IP地址)。下面是一些OpenSSL配置文件中賦值的例子:

  • 此外,email參數還有一個特殊的值“copy”,如果設置了該值,就會自動把證書主體中包含的Email地址復制到證書擴展項中。其使用方式如下:
  • subjectAltName = email:copy,email:my@OpenSSL. cn,URL:http://OpenSSL.cn

(9)頒發者別名(isuerAltName)擴展項

  • 頒發者別名擴展項為頒發者的證書提供了不同形式的命名方式,它采用的形式跟上述的主體別名基本一致。OpenSSL配置文件中的issureAltName支持subjectAltName的所有參數,但是不支持email參數的copy值。issureAltName還支持issure:copy選項,如果該選項設置了,那么證書頒發者主體別名中所有別名都會被復制到新簽發證書的頒發者別名擴展項中。
  • 下面是使用issure:copy選項的例子:?issureAltName = issuer:copy

(10)驗證機構信息處理(authorityInfoAces)擴展項

  • 驗證機構信息處理擴展項給出了如何處理跟CA相關的信息的詳細細節。在OpenSSL配置文件中,其基本格式如下
  • accessOID;location
  • location可以是主體別名中除了email:copy參數外的所有形式。accessOID理論上可以為任何有效的對象標識,但是,目前有具體意義的僅僅是OCSP和caIsures。OCSP表示在指定的location中作為OCSP響應服務器;caIsures則表示CA的地址。下面是兩個應用例子:

(11)CRL分布點(crlDistributionPoints)擴展項

  • CRL分布點擴展項用于指明用戶為了驗證證書吊銷狀態而需要查找CRL信息的發布站點。目前來說,OpenSSL的配置文件僅支持CRL分布點中的URL參數,而對于PKIX中規定的cRLIsuer和撤銷原因暫時還不支持。
  • crlDistributionPoints可以有多個URL參數,是一個多值型的擴展項。下面是crlDistributionPoints擴展項在OpenSSL配置文件中使用的兩個例子:?

(12)證書策略(certificatePolicies)擴展項

  • 證書策略擴展項定義了證書應用的策略,比如用于證書驗證的策略。證書策略擴展項目前使用并不多,支持的軟件也很少。在OpenSSL配置文件中,certificatePolicies是一種原始型的擴展項,其值域一般來說是原始的對象數字標識的列表,中間可以用逗號分開。
  • 下面是一個簡單的例子:? certificatePolicies = 1.2.4.5,1.1.3.4
  • 證書擴展策略除了支持對象標識符,還支持限定符,但是,在OpenSSL中,如果要使用限定符,那么就不能直接在certificatePolicies的值域中添加,而要使用單獨的字段,看起來如下面的形式:下面是一個簡單的例子:? certificatePolicies = 1.2.4.5,1.1.3.4 @policy
  • 目前來說,OpenSSL配置文件支持的證書擴展策略限定符有CPS(驗證操作規范)和userNotice。CPS給定了驗證操作規范的URL地址,而userNotice則包含了通知用戶的一些擴展信息。一個包含了證書擴展策略限定符的字段必須使用policyIdentifier參數指明對象標識(OID)。
  • 通常來說,CPS參數使用下面的表達形式: CPS.nnn = value
  • 其中,nnn為非負整數,這樣可以允許加入多個CPS地址。
  • userNotice限定符本身又包含了explicitText,organization和noticeNumbers三個限定符選項,所以也要使用單獨的userNotice限定符字段來給賦值,通常一個userNotice的值這樣表示: userNotice = @section
  • 其中section為userNotice的限定符字段。explicitText和organization的值都是文本形式的,而noticeNumbers的值則是一系列數字的列表。需要注意的是,organization和noticeNumbers兩個值在OpenSSL配置文件中是必須同時出現的,不能單獨出現其中一個而沒有給出另一個。下面是一個相對完整的證書策略擴展字段的例子:

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/446316.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/446316.shtml
英文地址,請注明出處:http://en.pswp.cn/news/446316.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

該工程中的宏被禁止_建筑勞務分包都能承擔什么工程

來源:找法網建筑工程的承包單位,也就是總承包單位可以將部分建造工程分包給具有資質的施工單位,這是法律所允許的,但是禁止將建造工程進行轉包。一、建筑勞務分包都能承擔什么工程建筑勞務分包能承擔什么工程要看分包單位的資質&a…

python實驗練習-類的多繼承

題目 1、概述: 完成學生,組長,教師的設計與實現。 2、具體實現內容: 學生: 姓名, 年齡, 學號 吃飯, 睡覺, 學習 組長: 姓名, 年齡, 學…

matlab用辛普森公式求積分_積分近似計算之辛普森公式

對于積分區間[a, b],若則成立辛普森公式辛普森公式可看作是改良的梯形公式。梯形公式是以直線逼近實際曲線,而辛普森公式則以二次曲線(即拋物線)逼近。以二次曲線逼近實際曲線根據辛普森公式可得各積分小區間內的積分值如下式所示:其中于是&a…

密碼學專題 文件編碼格式

OpenSSL中雖然使用PEM作為基本的文件編碼格式,但是,由于不同的對象其封裝的標準格式不太一樣,所以經常會導致讀者產生迷惑。此外,OpenSSL也支持DER編碼和過時的Netscape編碼格式(NET)OpenSSL的編碼是基于ASN.1標準的,A…

python實驗練習-圖書管理系統(使用文件來實現)

題目 功能描述: 圖書管理系統項目功能描述: (1)創建txt文本文檔,包含如下: ① books.txt:保存有一些書籍名稱; ② users.txt:用于保存用戶相關的信息; ③ us…

echarts 折線圖 設置y軸最小刻度_【硬貨】vue全家桶+Echarts+百度地圖,搭建數據可視化系統...

作者丨夙言來源丨前端大牛愛好者(Web-2017)https://segmentfault.com/a/1190000018993981本文章篇幅略長,內容有點多,大佬可根據目錄選擇性查閱,新人可一步步來閱讀。1、 前言1.1 業務場景突然接到產品說要做一個數據監控的系統。有線圖、柱狀…

密碼學專題 文本數據庫

應用概述 文本數據庫是跟OpenSSL的CA應用程序緊密結合在一起的,它以文本的方式記錄CA已經簽發的證書的狀態和摘要信息。這些狀態信息可以用于跟證書庫相關的一些操作,比如使用ca指令生成CRL主要就是讀取這個文本數據庫的信息作為參考。文本數據庫就是普…

Python學習13 異常處理機制

概括 常見的異常 異常處理機制 可以多個異常放在元組里面 一旦產生異常,try后面的語句不會繼續執行,會做異常處理 異常使用場景1 close應該放在finally中 異常使用場景2 finally關鍵字 會執行except后面的,報錯

java 布隆過濾器_牛逼哄哄的布隆過濾器,到底有什么用?

Java技術棧www.javastack.cn打開網站看更多優質文章作者:CodeBear的園子www.cnblogs.com/CodeBear/p/10911177.html本文是站在小白的角度去討論布隆過濾器,如果你是科班出身,或者比較聰明,又或者真正想完全搞懂布隆過濾器的可以移…

密碼學專題 序列號文件

序列號文件是ca指令簽發證書的時候的依據文件之一,它從該文件讀取當前簽發的證書的序列號并將序列號文件中的序列號加1,這樣,就可以確保證書的序論號是遞增的,不會重復。序列號文件也是一個文本文件,里面僅僅簡單包含了…

Java web后端6 java Bean EL表達式

EL表達式和JSTL概述 java Bean規范 java中成員變量使用類Integer private Integer count; java Bean的創建 創建java Bean: BookTest.java package com.example.elandjstl.bean;public class BookTest {//java中成員變量使用類Integerprivate Integer count;private Boolean…

python根須系統斜杠_深入淺出Python中的os模塊

「Author:Runsen」當初學Python的時候,把一些標準庫和第三方開源庫學的七零八落,不成系統,正好趁這個機會來系統的整理一下,先從Python常用的標準庫os開始吧。osOS模塊簡單的來說它是一個Python的系統編程的操作模塊&a…

密碼學專題 隨機數文件

無論使用OpenSSL的指令還是其API,隨機數文件都是會經常碰到的一個概念。大部分密碼算法的安全性都跟隨機數的好壞相關,所以一個成功的密碼學應用軟件,對隨機數的處理是不能隨便的。OpenSSL雖然沒有提供很完美的隨機數生成程序,但是…

Java web后端7JSTL

概括 下載jstl的jar包 官網&#xff1a;https://mvnrepository.com/ 網址1&#xff1a;https://search.maven.org/ 在pomxml中插入依賴&#xff1a; <dependency><groupId>taglibs</groupId><artifactId>standard</artifactId><version>1…

python輸入程序_python程序的輸入輸出(acm的幾個小程序)

#!/usr/bin/env python#codingutf-8 a[]for x inraw_input().split(): a.append(int(x))print sum(a) 下面的代碼只有一行&#xff0c;&#xff0c;可惜不是我想出來的&#xff01;&#xff01;&#xff01;&#xff01;&#xff1a; print sum(int(x) for x in raw_input().sp…

密碼學專題 口令輸入的方式

雖然口令的安全性很值得擔憂&#xff0c;但是口令在OpenSSL中是經常使用的&#xff0c;這是沒有辦法替代的一種簡易的保護數據的方法。OpenSSL中使用口令的地方很多&#xff0c;比如密鑰的加密和解密&#xff0c;等等。OpenSSL的指令提供了多種靈活的口令輸入方法&#xff0c;但…

Python學習14 模塊和包

模塊 公共類、函數都可以放在獨立的文件中&#xff0c;這樣其他多個程序都可以使用&#xff0c;而不必把這些公共性的類、函數等在每個程序中復制一份&#xff0c;這樣獨立的文件就叫做模塊&#xff0c;它們的擴展名為.py 標準庫中的模塊 使用help查看模塊 代碼&#xff1a; …

python語句分為_python以什么劃分語句塊

語句塊是在條件為真&#xff08;條件語句&#xff09;時執行或者執行多次&#xff08;循環語句&#xff09;的一組語句&#xff1b;在代碼前放置空格來縮進語句即可創建語句塊&#xff0c;語句塊中的每行必須是同樣的縮進量&#xff1b;&#xff08;推薦學習&#xff1a;Python…

Python學習15 正則表達式1

網址 正則表達式測試網址&#xff1a;https://regex101.com/ 概述 正則表達式&#xff1a; 正則表達式(Regular Expression)是一種文本模式&#xff0c;包括普通字符&#xff08;例如&#xff0c;a 到 z 之間的字母&#xff09;和特殊字符&#xff08;稱為"元字符"…

STL源碼剖析 空間配置器 查漏補缺

ptrdiff_t含義 減去兩個指針的結果的帶符號整數類型ptrdiff_t (Type support) - C 中文開發手冊 - 開發者手冊 - 云社區 - 騰訊云 std::set_new_handler&#xff08;&#xff09;函數的理解 關于set_new_handler的理解_wck0617-CSDN博客new分配內存的時候 如果分配的空間不…