自簽數字證書

2021-08-29 13:53:09 字數 3721 閱讀 4666

1. 數字證書認證機構(英語:certificate authority,縮寫為ca),也稱為電子商務認證中心、電子商務認證授權機構或證書授權中心,是負責發放和管理數字證書的權威機構,並作為電子商務交易中受信任的第三方,承擔公鑰體系中公鑰的合法性檢驗的責任。

2. csr是cerificate signing request的英文縮寫,即證書請求檔案,也就是證書申請者在申請數字證書時由csp(加密服務提供者)在生成私鑰的同時也生成證書請求檔案,證書申請者只要把csr檔案提交給證書頒發機構後,證書頒發機構使用其根證書私鑰簽名就生成了證書公鑰檔案,也就是頒發給使用者的證書。

參考:ssl生成證書流程

server生成私鑰server.key--> 生成csr -> +(ca.key+ca.crt)-> 生成證書server.crt

/ca匯出私鑰(ca.key)和證書(ca.crt)

\client生成私鑰client.cky--> 生成csr -> +(ca.key+ca.crt)-> 生成證書client.crt

步驟:a. 製作ca證書

1. 製作ca.key ca私鑰:

openssl genrsa -des3 -out ca.key 2048

ca.key是金鑰檔名,是生成的rsa私鑰,des3演算法,openssl格式,2048位強度;-out指定生成檔案的檔名。

注意:這個檔案包含了公鑰和金鑰兩部分,也就是說這個檔案即可用來加密也可以用來解密。後面的2048是生成金鑰的長度。

為了生成這樣的金鑰,預設中間需要輸入乙個密碼(適用於有安全需求的場合)。可以通過以下方法生成沒有密碼的key(其實就是從金鑰對中提取了私鑰,一般無此必要):  

openssl rsa -in ca.key -out ca.key ##此時生成的ca.key沒有密碼

2.用ca私鑰進行自簽名,得到自簽名的ca根證書

openssl req -new -x509 -days 365 -key ca.key -out ca.crt ##這裡及下面的ca.key均帶密碼

"req":openssl子命令,用於生成證書;"-new":生成新的證書請求;"-days 365":從生成之時算起,證書時效為365天(僅當使用-x509選項後有效);"-x509":生成自簽名證書,沒有該項時表示生成csr.

生成證書時,需輸入識別證書持有者身份的資訊,下表是關於它們的縮寫、說明和一些填寫說明。【此部分參考了互動百科的ssl條目】(帶"*"重要,必填)

dn欄位名

縮寫     說明(我的資訊)     填寫要求

country name     c     證書持有者所在國家(cn)     *要求填寫國家**,用2個字母表示

state or province name     st     證書持有者所在州或省份(zhejiang)     填寫全稱,可省略不填

locality name     l     證書持有者所在城市(hangzhou)     可省略不填

organization name     o     證書持有者所屬組織或公司(***)     *最好還是填一下

organizational unit name     ou     證書持有者所屬部門(no)     可省略不填

common name     cn     證書持有者的通用名(***.com)     *必填。

對於非應用證書,它應該在一定程度上具有惟一性;

對於應用證書,一般填寫伺服器網域名稱或萬用字元樣式的網域名稱。

email address           證書持有者的通訊郵箱(***@***.com)     可省略不填

注意:證書的詳細資訊-使用者或頒發者中出現一些明明沒有設定過的資訊時,請檢查openssl.cnf [req_distinguished_name],注釋掉*_default的引數.

b.用ca簽名認證

1.建立server待簽名證書私匙

因為這裡只是用於測試,這裡選擇1024強度.

openssl genrsa -aes128 -out server.key 1024

注意:golang中使用https時需另從金鑰對中提取私鑰"openssl rsa -in  server.key -out server_pri.key.

2. 生成 csr 檔案(證書請求檔案)

openssl req -new -key server.key -out server.csr

此時,在common name中填入**網域名稱,如blog.***.net即可生成該站點的證書,同時也可以使用泛網域名稱如*.***.net來生成所有二級網域名稱可用的**證書.多網域名稱證書可通過修改openssl.cnf生成.

其他說明:"please enter the following 'extra' attributes

to be sent with your certificate request

a challenge password :  #加密證書請求的密碼,證書請求需要在網路上傳遞,所以加密防止別人窺探,一般不用填

an optional company name :  #不清楚,不用填

"時,3.為 csr 檔案簽名,生成證書

openssl ca -policy policy_anything -days 365 -cert ca.crt -keyfile ca.key -in server.csr -out server.crt

引數說明:

ca                        //使用openssl的ca子命令

-in server.csr            //指定待簽發證書的 csr檔案為 server.csr

-out server.crt           //指定輸出所簽發證書的資訊到檔案,且檔名為server.crt

-cert ca.crt              //指定為證書簽名的ca的公鑰證書為ca.crt【用到ca證書的持有者資訊】

-keyfile ca.key           //指定為證書簽名的ca的私鑰檔案為ca.key【用ca私鑰實際執行簽名】

-days 365                 //指定所簽發證書的有效期為365天(1年),不允許超過ca.crt的有效期

-policy policy_anything   //指定簽發策略為 policy_anything 【即,允許所簽發證書的持有者資訊和頒發者資訊之間不遵守任何匹配策略】

-md                       //指定簽名雜湊演算法[預設是openssl.cnf中的default_md]

如果ca.key沒有密碼,以上命令後輸入兩次」y」,即可生成server.crt.

錯誤:1."「i am unable to access the..."

按照openssl.cnf裡的[ca_default]定義

mkdir -p democa/newcerts

touch ./democa/index.txt

echo "01" > democa/serial #頒發證書時使用的序列號,使用後會遞增.重置serial時,需清空newcerts資料夾和index.txt

c. 匯入證書

將ca.crt匯入自己的作業系統即可(證書[未匯入前]上有提示匯入到哪個專案下).

ps:mozilla、思科、akamai、identrust、eff和密西根大學研究人員宣布了 let』s encrypt ca專案,計畫為**提供免費ssl證書,加速將web從http過渡到https(從2015夏開始,詳細:

ssl證書詳解--數字簽名和數字證書

其他參考: 

php數字證書的簽名和驗籤

證書的簽名和驗籤經常用在和第三方對接介面的時候用到,用於身份校驗和防止資料被篡改。下面整理了乙個pfx格式的數字證書的簽名和cer格式的公鑰進行驗籤的過程。tips 需要php開啟openssl。簽名 public static function sign params,keypath,pwd el...

SSL,HTTPS,數字證書

ssl https secure hypertext transfer protocol 安全超文字傳輸協議 它是由netscape開發並內置於其瀏覽器中,用於對資料進行壓縮和解壓操作,並返回網路上傳送回的結果。https實際上應用了netscape的完全套接字層 ssl 作為http應用層的子層。...

SSL 數字證書

secure 可靠的.安全的 socket 座 layer 層 ssl 協議 ssl 是乙個安全協議,它提供使用 tcp ip 的通訊應用程式間的隱私與完整性。網際網路的 超文字傳輸協議 http 使用 ssl 來實現安全的通訊。由於ssl技術已建立到所有主要的瀏覽器和web伺服器程式中,因此,伺服...