您好,登錄后才能下訂單哦!
這篇文章主要介紹了OpenSSL中生成自簽名證書的方法有哪些,具有一定借鑒價值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
OpenSSL的命令行數量很龐大,很嚇唬人。
這是因為OpenSSL所涉及到的領域的確很多,比如各種對稱/非對稱算法,隨機數,簽名,加密,證書,結構分析,PKI體系的構建等,這些領域的背后有一大堆的RFC文檔,OpenSSL把這些理論上的東西都落實為算法供我們學習和使用。
算法的實現可以有2種形式:API和“工具”。
前者是由程序員使用的函數庫,后者是編譯完成的本地代碼——它有3個名字:命令、工具,應用程序。
例如生成自簽名證書的命令行:
openssl req -x509 -newkey rsa:8192 -keyout rca.key -out rca.cer -days 365
其中的“req”是“命令”(也可稱為“工具”和“應用程序”),-days是“選項”,365是“參數”。
俗話說“萬變不離其宗”,雖然它的命令行龐大而復雜,但還是有規律可循的,比如-inform 指定輸入文件格式,-outform指定輸出文件格式,這兩個選項重復出現在多個命令之中;還有選項雖然名字相同,但對不同的命令有不同的功能,比如 -in選項,如果配合req命令,就是輸入證書請求文件,如果配合x509命令,就是輸入X.509格式的證書。
鑒于OpenlSSL命令行的靈活性,同一個功能可以由不同的命令行完成,以下是我的一些總結。
當然,很可能還有未囊括進來的命令行,歡迎你寫在評論區,我會在正文把你列為感謝作者。
讓我們共同完成這個很有趣的“工程”——給Open SSL找相同!
當前版本號:OpenSSL for Windows 1.1.1c 28 May 2019
生成自簽名證書的4種方法
方法 1:req命令(不需要請求文件)
::生成自簽名證書和私鑰 openssl req -x509 -newkey rsa:8192 -keyout rca.key -out rca.cer -days 365
方法2:x509命令(需要請求文件)
::生成請求文件和私鑰 openssl req -new -out ca.csr -keyout ca.key ::生成自簽名證書 openssl x509 -signkey ca.key -req -days 365 -in ca.csr -out cacert.pem
方法3:ca命令(需要請求文件)
:: 創建ca命令所需的文件和目錄結構 d:&cd\&md ca1&cd\ca1&md democa&md democa\newcerts&md democa\private cd.>democa\index.txt&echo ca01>democa\serial ::生成請求文件和私鑰,私鑰保護密碼是1234: openssl req -new -out ca.csr -keyout ca.key -days 3650 -subj /C=CN/ST=jiangsu/L=nanjing/O=Tiger/OU=CA-1/CN=CA1/emailAddress=ca1@tiger.com -set_serial 0xca01 -passout pass:1234 ::生成自簽名證書 openssl ca -selfsign -in ca.csr -keyfile ca.key -out ca.cer -outdir . -passin pass:1234 -days 3650 -create_serial -extensions v3_ca
方法4:ca命令重簽名
讀入之前的自簽名證書ca1.cer,以新的DN重簽名:
:: 創建ca命令所需的文件和目錄結構 d:&cd\&md ca1&cd\ca1&md democa&md democa\newcerts&md democa\private cd.>democa\index.txt&echo ca01>democa\serial :: 生成自簽名的CA1根證書,私鑰,私鑰保護密碼是1234: openssl req -x509 -newkey rsa:8192 -keyout ca1.key -out ca1.cer -days 3650 -subj /C=CN/ST=jiangsu/L=nanjing/O=Tiger/OU=CA-1/CN=CA1/emailAddress=ca1@tiger.com -set_serial 0xca01 -passout pass:1234 :: 以新的DN名稱重新簽名CA1根證書,輸出的新自簽名證書是ca1-ok.cer openssl ca -ss_cert ca1.cer -keyfile ca1.key -cert ca1.cer -out ca1-ok.cer -outdir . -create_serial -policy policy_anything -batch -passin pass:1234 -subj /C=CN/O=aa/ST=bb/CN=CA1
作為CA給(中間CA或者最終實體)簽署證書的2種方法
分別是X509命令和CA命令,詳見我的另外2篇文章,這里不再贅述。
OpenSSL自建CA和CA鏈,給主機簽發證書的批處理(使用CA命令)
OpenSSL自建CA和CA鏈,給主機簽發證書的批處理(使用x509命令)
生成RSA私鑰的3種方法
方法1:genrsa命令:
openssl genrsa -out ca.key 8192
方法2:genpkey命令:
::用密碼123456保護私鑰 openssl genpkey -out rsa_pri.key -outform PEM -pass pass:123456 -aes-128-cbc -algorithm RSA -pkeyopt rsa_keygen_bits:8192
方法3:req命令
openssl req -x509 -newkey rsa:8192 -keyout rca.key -out rca.cer -days 3650
RSA加密的2種方法
方法1:pkeyutl命令:
::公鑰加密 openssl rsautl -encrypt -in a.txt -out 1.enc -inkey ca.pub -pubin ::私鑰解密 openssl rsautl -decrypt -in 1.enc -out dec.txt -inkey ca.key
注:該命令的缺陷是只能對短小的文件進行加密和簽名操作,如果太大會報以下錯誤:
方法2:rsautl命令:
經實驗,對于當前版本的OpenSSL,該命令能處理的文件最大為1013字節
::公鑰加密 openssl rsautl -encrypt -in a.txt -out 1.enc -inkey ca.pub -pubin ::私鑰解密 openssl rsautl -decrypt -in 1.enc -out dec.txt -inkey ca.key
注:若想要RSA加密(以及下文的簽名)無體積限制,可以使用gpg4win。
簽名/驗證簽名的4種方法
方法1:dgst命令:
::對待簽名的文件體積沒有限制;原理是生成待簽名文件的散列值,然后用公鑰/私鑰加密該散列值。 ::用私鑰key.pem給1.zip生成二進制的簽名文件,算法是SHA-256,簽名文件是1.sig,注意不能使用-hex選項: openssl dgst -sha256 -sign key.pem -out 1.sig 1.zip ::用公鑰對生成的簽名文件1.sig與源文件1.zip進行比對驗證,注意簽名的算法和驗證簽名的算法要相同: openssl dgst -sha256 -verify pub.pem -signature 1.sig 1.zip ::同上,只不過用私鑰驗證簽名 openssl dgst -sha256 -prverify key.pem -signature 1.sig 1.zip
方法2:md5命令(語法與dgst一模一樣):
::對待簽名的文件體積沒有限制;原理是生成待簽名文件的散列值,然后用公鑰/私鑰加密該散列值。 ::用私鑰ca.key給文件text.txt簽名,生成了名為sign的簽名文件: openssl md5 -sha256 -sign ca.key -out sign test.txt ::用公鑰ca.pub對生成的簽名文件1.sig與源文件1.zip進行比對驗證,注意簽名的算法和驗證簽名的算法要相同: openssl md5 -sha256 -verify ca.pub -signature sign test.txt ::同上,只不過用私鑰驗證簽名 openssl md5 -sha256 -prverify ca1.key -signature sign test.txt
方法3:rsautl命令:
::rsautl只能給小文件簽名,經我的實驗不能大于1013字節 ::私鑰簽名(其實就是私鑰加密文件) openssl rsautl -sign -in abc.txt -out abc.sig -inkey ca.key ::公鑰驗證(其實就是用公鑰將其解密),如果通過就恢復出原始數據,否則報錯 openssl rsautl -verify -in abc.sig -out abc.vfy -inkey ca.pub -pubin方法1:pkeyutl令:
方法4:pkeyutl命令:
::pkeyutl只能給散列值簽名。 ::實驗目標:給test.txt生成散列值,然后對散列值簽名,最后驗證這個散列值的簽名。 ::先用dgst命令生給文件test.txt成二進制的散列值,文件名是test.sig openssl dgst -sha256 -binary -out test.sig test.txt ::用私鑰給這個散列值簽名(就是私鑰加密散列值),生成簽名文件md.sig: openssl pkeyutl -sign -inkey ca.key -keyform PEM -in test.sig -out md.sig ::讀入公鑰、散列值簽名md.sig、散列值test.sig以驗證該簽名是否正確。原理就是用公鑰解密md.sig,結果與test.sig相同即驗證通過 openssl pkeyutl -verify -inkey ca.pub -keyform PEM -pubin -in test.sig -sigfile md.sig
提取公鑰的4種方法
方法1:rsa命令:
openssl rsa -in ca.key -pubout -out ca.pub
方法2:pkey命令:
openssl pkey -in ca.key -pubout -out ca.pub
方法3:req命令:
提取請求文件之中的公鑰:
openssl req -in host.csr -pubkey -out host.pub
方法4:x509命令:
提取證書中的主題(使用者)的公鑰:
openssl x509 -in ca.cer -pubkey -noout -out ca.pub
創建證書鏈2方種法
方法1:雙擊證書,點擊“安裝證書”,把根證書導入“受信任的根證書頒發機構”,把中間證書導入“中級證書頒發機構”,這就把證書鏈導入至windows證書庫,過程一目了然,截圖略。
方法2:通過copy命令創建證書鏈,重點是中間證書在前,依次往后排,最后是根證書:
copy ca3.cer+ca2.cer+ca1.cer ca3-chain.cer
驗證證書鏈3方種法
方法1:對應創建證書鏈方法1,通過在Web客戶端將根證書和中間證書導入Windows證書庫,應用程序(例如谷個瀏覽器)可以通過CryptoAPI驗證證書鏈。若要人工驗證,雙擊證書即出現層次化的證書鏈結構:
方法2:對應創建證書鏈方法2,使用verify命令:
openssl verify -CAfile ca-chain.cer host1.cer
方法3:x509命令的-CApath選項
本方法在Windows下操作比較麻煩。先建立目錄,例如yz,然后把根證書和所有中間CA證書都拷貝到該目錄,但要改名為xxxxxxxx.0,其中的8個x是用openssl x509 -in xx.cer -subject_hash -noout輸出的hash值,后面的.0必須存在。例如ca1是根證書,ca2.cer和ca3.cer是中間證書,host1是ca3給用戶簽署的SSL證書;就把ca1.cer、ca2.cer、ca3.cer都拷貝yz目錄,然后依次改名,比如openssl x509 -in ca1.cer -subject_hash -noout輸出的hash值是8607f596,就將ca1.cer改名為8607f596.0,改名全部完成之后執行命令:
openssl verify -CApath yz host1.cer
感謝你能夠認真閱讀完這篇文章,希望小編分享的“OpenSSL中生成自簽名證書的方法有哪些”這篇文章對大家有幫助,同時也希望大家多多支持億速云,關注億速云行業資訊頻道,更多相關知識等著你來學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。