生成自簽名證書

數字證書

數字證書包含服務器名稱、主機名稱,簽發機構的名稱,簽發機構的簽名。如何生成自簽名證書。證書的目的是簡歷特定密鑰對與特定實體之間的聯繫。
自簽名根證書是指一堆密鑰對的私鑰對本身相應的公鑰生成的證書請求進行簽名而頒發的證書,證書的申請人和簽發人都是同一個。
須要一對密鑰對;
經常使用的是RSA,DSA密鑰,ECDSA密鑰,用於密鑰交換的證書不能用DSA,只能用RSA,由於DSA不能加解密也不能作密鑰交換,只能作簽名;ECDSA尚未被大部分的CA支持;
生成密鑰可使用OpenSSL的genrsagendsa指令,也可使用req指令;
證書認證請求文件(csr文件)
這是按照必定格式生成的文件,裏面包含實體信息
將實體信息和公鑰一塊兒用相應的私鑰簽名,是CA(證書認證)能確認這些信息是用戶發送的(證書請求中的公鑰拿出來驗證這個證書請求的簽名)
經過OpenSSL的req指令填寫和生成這個csr文件
不一樣的CA要求,可能須要更改默認的配置文件openssl.cnf
將證書請求文件(csr文件)給CA簽發
驗證證書請求上的簽名是否正確,確保公鑰對應的私鑰就在申請者手中而且申請信息是正確沒被更改的
CA對某些字段信息可能有特殊的要求,好比要求國家,身份等信息要求跟CA自己設定的同樣
若是CA是在OpenSSL指令的基礎上,那麼它使用的簽發指令多是ca,也多是x509node

如何生成一個簡單的自簽名證書

方法一:生成一個自簽名的根證書

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命令

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.cnfreq字段的default_bits選項的參數,生成一個RSA密鑰
若是沒有使用-nodes選項,而且生成了新的私鑰,私鑰會被輸出到-keyout指定的文件中時將被以DES3的CBC模式加密。算法

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
crl指令
crl指令用於顯示、處理和驗證CRL文件信息
-in
-inform
-out
-outform
-noout測試

生成私鑰

openssl genrsa -out server.key 1024

生成ca證書

須要本身扮演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

利用ca證書和私鑰生成帶有ca簽名的證書

openssl x509 -req -CA ca.crt -CAKey ca.key -CAcreateserial -in server.csr -out server.rt
相關文章
相關標籤/搜索