數字證書包含服務器名稱、主機名稱,簽發機構的名稱,簽發機構的簽名。如何生成自簽名證書。證書的目的是簡歷特定密鑰對與特定實體之間的聯繫。
自簽名根證書是指一堆密鑰對的私鑰對本身相應的公鑰生成的證書請求進行簽名而頒發的證書,證書的申請人和簽發人都是同一個。
須要一對密鑰對;
經常使用的是RSA,DSA密鑰,ECDSA密鑰,用於密鑰交換的證書不能用DSA,只能用RSA,由於DSA不能加解密也不能作密鑰交換,只能作簽名;ECDSA尚未被大部分的CA支持;
生成密鑰可使用OpenSSL的genrsa
和 gendsa
指令,也可使用req指令;
證書認證請求文件(csr文件)
這是按照必定格式生成的文件,裏面包含實體信息
將實體信息和公鑰一塊兒用相應的私鑰簽名,是CA(證書認證)能確認這些信息是用戶發送的(證書請求中的公鑰拿出來驗證這個證書請求的簽名)
經過OpenSSL的req
指令填寫和生成這個csr文件
不一樣的CA要求,可能須要更改默認的配置文件openssl.cnf
將證書請求文件(csr文件)給CA簽發
驗證證書請求上的簽名是否正確,確保公鑰對應的私鑰就在申請者手中而且申請信息是正確沒被更改的
CA對某些字段信息可能有特殊的要求,好比要求國家,身份等信息要求跟CA自己設定的同樣
若是CA是在OpenSSL指令的基礎上,那麼它使用的簽發指令多是ca
,也多是x509
node
openssl req -new -x509 -newkey rsa:1024 -out server.crt
openssl genrsa -out server.key 1024 openssl req -new -x509 -key server.key -out server.crt
openssl genrsa -out server.key 1024 openssl req -new -key server.key -out server.csr openssl x509 -req -in server.csr -out server.crt
req
指令既能夠直接生成一個新的自簽名證書,也能夠根據現有的證書請求和其相應私鑰生成自簽名根證書。若是是根據現有證書請求生成自簽名根證書,那麼必定要-key
選項指定相應的私鑰指令才能執行成功。req
指令也能夠生成密鑰對,但在使用req
同時生成密鑰對是對密鑰對保存和格式有限制(只能是PEM編碼,DES3-CBC模式加密)。若是須要更靈活的處理,可使用genrsa
或者gendsa
先生成密鑰而後使用-key
選項指定。
參數選項-new
指定執行生成新的證書請求,此時會忽略-in
指定的內容-x509
根據現有的證書請求生成自簽名根證書(要求使用-key
指定證書請求裏面的公鑰相應的私鑰,以便對自簽名根證書進行簽名)-key
指定輸入的密鑰,若是不指定此選項會根據-newkey
選項的參數生成密鑰對-newkey
指定生成一個新的密鑰對,只有在沒有-key
選項的時候才生效,參數形式爲rsa:numbits
或者 dsa:file
-subj
直接從指令行指定證書請求的主體名稱,格式爲/
分割的鍵值對字符串,若是沒有此選項,那麼會彈出交互提示;-days
設定了生成的自簽名根證書的有效期,單位爲天;該選項只有在使用了-x509
選項生成自簽名證書的時候才生效,默認爲30天。-config
指定req
指令在生成證書請求的時候使用的OpenSSL配置文件,通常默認爲openssl.cnf
-extensions
選項指定了生成自簽名根證書的時候使用的擴展字段,其參數爲OpenSSL配置文件中的某個字段名-reqexts
選項指定了生成證書請求是使用的擴展字段,該字段參數也是配置文件中的某個字段名-text
讓指令輸出證書請求或者自簽名根證書內容的明文解析,默認狀況下,它將輸出全部可能輸出的內容,若是使用了reqopt
選項,則輸出內容取決於reqopt
選項-reqopt
指定text
選項輸出的內容,能夠爲多個,每一個之間使用,
分隔set_serial
指定生成的自簽名根證書的序列號,默認狀況下生成的自簽名根證書序列號是0;該選項也只有在生成自簽名根證書的時候有效。-keyout
置頂新生成的私鑰的輸出(僅在使用了-newKey
或 -new
選項致使生成新密鑰對的時候纔有效,若是使用了-key
則此選項被忽略)-keyform
指定輸入密鑰的編碼格式(好比PEM,DER,PKCS#12,Netscape,IIS SGC,Engine等)-in
指定輸入證書請求文件,若是使用了-new
或者 -newkey
選項,此選項被忽略-inform
指定輸入證書請求文件的編碼格式(好比PEM,DER)-out
指定輸出證書請求文件或自簽名證書文件-noout
使用此選項後,指令將不會輸出編碼的證書請求或者自簽名根證書到-out
選項指定的文件中,通常用來測試指令或者查看證書請求的信息-outform
指定輸出證書請求文件或自簽名證書的編碼格式(好比PEM,DER)-pubkey
使用此選項活 指令將輸出PEM編碼的公鑰到-out
選擇指定的文件中,默認狀況下只輸出私鑰到-keyout
指定的文件,並不輸出公鑰。-passin
指定讀取-key
選項指定的私鑰所須要的解密口令,若是沒有指定,私鑰又有密鑰的話,會彈出交互提示-passout
指定-keyout
選項輸出私鑰時使用的加密口令-nodes
表示不對私鑰進行加密,若是指定此選項,則忽略-passout
指定的口令;若是沒有此選項,卻指定了-passout
則會有交互提示。-digest
指定生成證書請求或者自簽名根證書是使用的信息摘要算法,通常在生成數字簽名的時候使用。-verify
使用此選項對證書請求中的數字簽名進行驗證操做,並給出失敗或者成功的提示信息,其驗證的過程是從證書請求裏面提取公鑰,而後使用該公鑰對證書請求的數字簽名進行驗證。
若是沒有-key
選項也沒有-newkey
選項,則會根據openssl.cnf
中req
字段的default_bits
選項的參數,生成一個RSA密鑰
若是沒有使用-nodes
選項,而且生成了新的私鑰,私鑰會被輸出到-keyout
指定的文件中時將被以DES3的CBC模式加密。算法
ca
指令模擬一個完整的CA服務器,它包括簽發用戶證書,吊銷證書,產生CRL及更新證書庫等管理操做-config
指定要使用的配置文件,若是沒有此選項,則會先查找OPENSSL_CONF
或者SSLEAY_CONF
定義的文件名,若是這兩個環境變量都沒有定義,就使用OpenSSL安裝的默認路徑,通常是/usr/local/openssl/openssl.cnf
,具體看安裝配置-startdate
設置證書的生效時間 格式爲YYMMDDHHMMSSZ
指定年月日時分秒
,若是沒有則使用主配置文件中的default_startdate
-enddate
格式跟-startdate
同樣-days
設置證書的有效天數,生效時間到到期時間之間的天數,若是使用了-enddate
,此選項被忽略-name
指定配置文件中CA選項的名稱-notext
不輸出明文信息到證書文件-subj
直接從指令行指定證書請求的主體名稱,格式爲/
分割的鍵值對字符串,若是沒有此選項,那麼會彈出交互提示;-cert
參數是一個能夠包含路徑的文件名,該文件是一個PEM編碼的X.509證書文件-keyfile
參數是一個包含路徑的文件名,文件格式能夠爲PEM,DER,PKCS#12,Netscape,IIS SGC,Engine,但須要經過-keyform
指定究竟是哪一種格式-policy
指定CA的匹配策略-extensions
指定x509 v3
擴展字段的字段名,若是沒有這個選項就由-extfile
中內容-extfile
指定x509 v3
擴展的配置文件,若是沒有-extensions
字段,則由CA主配置文件中的x509_extensions
選項指定-in
指定一個能夠包含路徑的證書請求文件名,應該是PEM變得PKCS#10格式的證書請求-infiles
指定一系列包含PEM編碼證書請求的文件,包含多個,只能做爲指令的最後一個選項,其後的參數都被認爲是證書請求文件-out
選項指定了輸出簽發好的證書或者新生成的CRL的文件,若是沒有使用-notext
選項,那麼證書的明文信息也會輸出到-out
選項指定的文件中-outdir
選項指定了新生成的證書的輸出目錄,默認輸出到newecerts
目錄,並使用.pem
做爲後綴,都是PEM編碼。服務器
x509
指令能已各類方式顯示一個證書的內容,也能夠對一個證書的格式進行轉換,還能夠簽發證書-in
-inform
-out
-outform
-keyform
-CA
指定簽發證書或者轉換證書格式的時候須要的CA證書文件-CAkey
指定簽發證書或者轉換證書格式時須要的CA證書對應的私鑰文件路徑-CAform
指定CA證書文件的格式-CAkeyform
私鑰文件格式-startdate
-enddate
-pubkey
-noout
crl指令crl
指令用於顯示、處理和驗證CRL文件信息-in
-inform
-out
-outform
-noout
測試
openssl genrsa -out server.key 1024
須要本身扮演ca機構給本身簽名,因此首先生成ca證書編碼
openssl genrsa -out ca.key 1024 ---- 生成ca私鑰 openssl req -new -key ca.key -out ca.csr ---- 根據私鑰生成請求文件 openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt ---- 根據請求文件生成證書
openssl req -new -key server.key -out server.csr
openssl x509 -req -CA ca.crt -CAKey ca.key -CAcreateserial -in server.csr -out server.rt