域名啟用HTTPS加密功能更安全 國內免費SSL證書對比
HTTPS(全稱:HyperTextTransferProtocoloverSecureSocketLayer),是以安全為目標的HTTP通道,簡單講是H...
證書生成過程介紹
證書的目的是建立特定密鑰對與特定實體之間的聯繫。
自簽名根證書是指一堆密鑰對的私鑰對自己相應的公鑰生成的證書請求進行簽名而頒發的證書,證書的申請人和簽發人都是同一個。
genrsa
和 gendsa
指令,也可以使用req指令;req
指令填寫和生成這個csr文件openssl.cnf
ca
,也可能是x509
常用指令
req 指令
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模式加密。使用實例
rsa
2048位密鑰,輸出證書請求到request.pem
,密鑰到private.pem
,私鑰口令為12345678
openssl req -new -newkey rsa:2048 -keyout private.pem -passout pass:12345678 -out request.pem
openssl req -in request.pe -verify -noout
openssl req -x509 -newkey rsa:2048 -keyout private.pem -passout pass:12345678 -out selfsign.crt
openssl req -text -in fd.csr -noout
ca 指令
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
x509
指令能已各種方式顯示一個證書的內容,也可以對一個證書的格式進行轉換,還可以簽發證書參數選項
-in
-inform
-out
-outform
-keyform
-CA
指定簽發證書或者轉換證書格式的時候需要的CA證書文件-CAkey
指定簽發證書或者轉換證書格式時需要的CA證書對應的私鑰文件路徑-CAform
指定CA證書文件的格式-CAkeyform
私鑰文件格式-startdate
-enddate
-pubkey
-noout
使用實例
openssl x509 -x509toreq -in fd.crt -out fd.csr -signkey fd.key
openssl x509 -req -days 365 -in fd.csr -signkey fd.key -out fd.crt
openssl x509 -text -in fd.crt -noout
crl指令
crl
指令用於顯示、處理和驗證CRL文件信息參數選項
-in
-inform
-out
-outform
-noout
開發測試使用自簽名證書實例
生成認證私鑰 私鑰 私鑰
要輸入密碼openssl genrsa -des3 -out qunarzz-dev-enc.key 2048
可以通過如下方式解密(輸入上面的密碼)openssl rsa -in qunarzz-dev-enc.key -out qunarzz-dev.key
生成帶有SAN(Subject Alt Name)的自簽名證書
生成對多個主機有效的自簽名證書
missing_subjectAltName 問題解決
原有的簡單自簽名證書在chrome裡面不好使了,提示missing_subjectAltName
openssl req -new -sha256 \
-x509 \
-days 10000 \
-key qunarzz-dev.key \
-subj "/C=CN/ST=BeiJing/L=Beijing/O=QUNAR/OU=FE/CN=qunarzz.com" \
-extensions SAN \
-config <(cat ./openssl.cnf \
<(printf "[SAN]\nsubjectAltName=DNS.1:qunarzz.com,DNS.2:q.qunarzz.com,DNS.3:*.qunarzz.com")) \
-out qunarzz-dev.crt
相關字段的信息C => 國家 Country
ST => 省 State
L => 市 City
O => 機構 Organization
OU => 部門 Organization Unit
CN => 域名 Common Name (證書所請求的域名)
emailAddress => main administrative point of contact for the certificate
參考資料