怎樣給一個網站辦法安全證書呢?以tomcat為例,我們正常訪問localhost:8080都是不安全的網站,那么怎樣使得這個網站安全呢?
首先我先全域說一下,我們需要先下載openssl,然后使用openssl下載和配置我們需要的證書,也就是證書三件套,配置本地的CA證書,Server證書以及Client證書!到時候你就發現三種證書配置的方式差不多
接下來正式開始從第一部講解:首先下載openssl,下載的方式有兩種,一種是原始碼自己配置,還有一種是大牛給你配好了.exe執行檔案,我們無腦next就好:
http://slproweb.com/products/Win32OpenSSL.html


這里我們使用兩個箭頭的都可以,搭建可能會問第一個和第一個大小相差那么大,為什么下載第一個,因為第二個是給專業人員用的,我們只需要下載幾MB的就好,我選擇的是1.1.1這個版本,至于為什么不選3.0.0等等說
下載好了之后,我們需要安裝在自己的目錄:

然后為其添加環境變數:(系統變數下面的PATH)

然后再cmd里面:openssl version

下一步我們找到我們的openssl安裝位置,右鍵點擊openssl.exe,以管理員身份運行!(就是這里我第一次下載3.0.0每次一點這個.exe就一閃而過…還不知道怎么解決)
然后就是一頓固定操作:(溫馨提示:在你配置到下面有三步都是生成檔案那個,你必須生成一個然后quit退出重新打開.exe生成一個然后再退出再打開!不知道為啥)
1:生成服務端私鑰:genrsa -out server.key 1024
2:生成服務端公鑰:rsa -in server.key-pubout -out server.pem 
3:生成客戶端公鑰:rsa -inclient.key -pubout -out client.pem
4:生成CA私鑰:genrsa -out ca.key 1024
5:生成CA請求檔案:opensslreq-new-keyca.key-outca.csr

注意:
State、Organization相關內容在生成客戶端和服務器端證書的時候
也需要填寫,但不要寫成一樣的,可以隨意寫如:myca,、myse,、mycl
CommonName這一項,是最后可以訪問的域名,因為是在本機,所以寫成localhost,后面生成客戶端和服務器端證書的時候也需要 寫成localhost
6:生成CA證書:x509 -req -inca.csr -signkey ca.key -out ca.crt
7:生成服務端請求檔案: req -new -key server.key -out server.csr
8:向自己的CA機構申請證書,簽名程序需要CA的證書和私鑰參與,最終頒發一個帶有CA簽名的證書:x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -inserver.csr -out server.crt
9:生成客戶端請求檔案:req -new -key client.key -out client.csr
10:同樣向CA機構申請證書:x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -inclient.csr -out client.crt



11:轉化為.p12格式的檔案pkcs12 -export -in ca.crt -inkey ca.key -out ca.p12
12:匯出server.p12格式檔案:pkcs12 -export -in server.crt -inkey server.key- out server.p12
匯出client.p12格式檔案:pkcs12 -export -in client.crt -inkey client.key -out client.p12
13:?將server.p12檔案轉化為jks檔案:keytool -importkeystore -keyalgEC -srckeystore server.p12 -destkeystore server.jks -srcstoretype pkcs12

通過上面的步驟我們會得到server.jks
差不多生成了這么多東西,然后我們將server.jks拷貝到tomcat的conf檔案夾下,然后修改一下server.xml:


改成這個樣子以后,我們將生成的ca.p12和client.p12分別匯入瀏覽器:我以chorm為例:
紅箭頭標注的是幾個需要注意的點:



其實這里我多了一步就是windows+R鍵輸入mmc:然后將兩個localhost拖到受信任的根證書頒發機構下面



然后再谷歌訪問https//localhost:8443:

使用ie訪問:

成功!
常用的openssl命令:
格式轉換
PEM私鑰轉PKCS#8
openssl pkcs8 -topk8 -in mysite.key -out mysite.pk8 -outform PEM
PKCS#8轉PEM
openssl rsa -in mysite.pk8 -out mysite.key
PEM轉PKCS12
openssl pkcs12 -export -inkey mysite.key -in mysite.pem -nodes -out mysite.p12(輸出不帶口令的p12證書)
openssl pkcs12 -export -inkey mysite.key -in mysite.pem -passout pass:123456 -out mysite.p12 (輸出帶口令的p12證書)
P12轉證書
openssl pkcs12 -in mysite.p12 -nokeys -out mysite.pem
openssl pkcs12 -in mysite.p12 -nokeys -passin pass:123456 -out mysite.pem (p12檔案帶口令的情況)
P12轉私鑰
openssl pkcs12 -in mysite.p12 -nocerts -nodes -out mysite.key (輸出不加密的私鑰)
openssl pkcs12 -in mysite.p12 -nocerts -passout pass:123123 -out mysite.key (輸出加密后的私鑰)
openssl pkcs12 -in mysite.p12 -nocerts -passin pass:123456 -passout pass:123123 -out mysite.key (p12檔案帶口令的情況)
密鑰操作
生成密鑰
genrsa
openssl genrsa -out rsa.key 2048(私鑰不帶密碼)
openssl genrsa -out rsa.key -aes256 -passout pass:123456 2048(私鑰帶密碼)
ecparam
openssl ecparam -name CN-GM-ECC -out sm2.param
openssl ecparam -in sm2.param -out sm2.key -genkey -noout
genpkey
openssl genpkey -algorithm RSA -out rsa.key -pkeyopt rsa_keygen_bits:2048
openssl genpkey -parafile sm2.param -out sm2.key
``
不帶密碼的私鑰==>帶密碼的私鑰
openssl rsa -in rsa.key -out xxx.key -aes256 -passout pass:123456
openssl ec -in sm2.key -out xxx.key -sm4 -passout pass:123456
帶密碼的私鑰==>不帶密碼的私鑰
openssl rsa -in xxx.key -passin pass:123456 -out yyy.key
openssl ec -in xxx.key -passin pass:123456 -out yyy.key
pkey加解密私鑰
openssl pkey -in rsa.key -out rsa_enc.key -des3 -passout pass:1234
openssl pkey -in rsa_enc.key -out rsa.key -passin pass:1234
從密鑰對提取公鑰
openssl rsa -in chen.key -pubout -out chen_pub.key
非對稱加密
簽名
openssl pkeyutl -sign -inkey rsa.key -in rsa.dat -out sign.dat
驗簽
openssl pkeyutl -verify -certin -inkey rsa.pem -in rsa.dat -sigfile sign.dat
openssl pkeyutl -verify -inkey rsa.key -in rsa.dat -sigfile sign.dat
加密
openssl pkeyutl -encrypt -inkey rsa.key -in rsa.dat -out enc.dat
解密
openssl pkeyutl -decrypt -inkey rsa.key -in enc.dat -out source.dat
pkcs7
簽名
openssl smime -sign -in short.dat -signer rsa.pem -inkey rsa.key -out rsa.sig -outform PEM -nodetach -binary -md sha256
驗簽
openssl smime -verify -CAfile rsa-ca.pem -signer rsa.pem -in rsa.sig -inform PEM -noverify -content short.dat -binary
加密
openssl smime -encrypt -sha1 -in long.dat -outform PEM -out rsa.env -binary rsa.pem
解密
openssl smime -decrypt -in rsa.env -out rsa.plain -inkey rsa.key -inform PEM -binary
這個任務也是自己很用心的去解決問題,得出的結論就是,你要用用于嘗試,不要害怕這個指令對不對,只要記錄好自己的每一步,就漸勇敢往前沖,感覺出錯到了無法挽回的地步就全部卸載洗掉,重新換一個版本繼續,通過最近這幾次的任務,我發現我逐漸自信起來,遇到問題居然一點點也不慌,哪怕完全沒有頭緒想了很久很久,我心里一直有一種神秘的直覺就是:我一定會解決這個問題是,只不過需要一點點時間!加油吧!
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/342062.html
標籤:其他
