使用openssl製作證書和進行CMS格式數字簽名

2021-10-22 08:01:45 字數 2796 閱讀 8323

openssl中有如下字尾名的檔案

.key格式:私有的金鑰

.csr格式:證書簽名請求(證書請求檔案),含有公鑰資訊,certificate signing request的縮寫

.crt格式:證書檔案,certificate的縮寫

.crl格式:證書吊銷列表,certificate revocation list的縮寫

.pem格式:用於匯出,匯入證書時候的證書的格式,有證書開頭,結尾的格式

openssl實現了pkcs7,為什麼還要實現cms?

pkcs7和cms看起來一樣,cms基於pkcs7,還基於乙個privacy-enhanced mail的標準, 因此cms也可解析pkcs7簽名

區別是:pkcs#7不支援遞迴巢狀, cms支援,cms還有增加了其它一些東西

1.數字簽名

非對稱加密演算法的效率是非常低的。

將內容使用hash函式生成摘要,再用私鑰對摘要進行加密,生成數字簽名。然後將內容附上數字簽名一同傳輸。

收件方收到後,用公鑰對數字簽名進行解密,得到摘要,然後再對原內容進行hash生成摘要,比對這兩個摘要是否相同,相同則說明內容沒有被篡改。

2.數字證書

由ca頒發給**的身份證書,裡面包含了該**的公鑰,有效時間,**的位址,ca的數字簽名等。

所謂的ca數字簽名,實際上就是使用了ca的私鑰將**的公鑰等資訊進行了簽名,當客戶端請求伺服器的時候,**會把證書發給客戶端,客戶端首先可以通過ca的數字簽名校驗ca的身份,也能證明證書的真實完整性。客戶端有沒有可能到乙個假冒的ca去校驗數字證書呢?不太可能,因為ca的位址是內嵌在瀏覽器中的,很難被篡改。

1. 建立根證書,rootca.pem為根證書

vi rootca.cnf

[ req ]

default_bits = 4096

distinguished_name = req_distinguished_name

prompt = no

string_mask = utf8only

x509_extensions = extensions

[ req_distinguished_name ]

c = cn

o = test

cn = rootca

[ extensions ]

subjectkeyidentifier = hash

authoritykeyidentifier = keyid:always, issuer

basicconstraints = ca:true

keyusage = crlsign, keycertsign

echo unique_subject=no > index.attr

openssl req -new -nodes -utf8 -sha256 -days 36500 -batch -x509 -config rootca.cnf -outform pem -out rootca.pem -keyout rootca_pri.pem

openssl x509 -in rootca.pem -inform pem -outform der -out rootca.der

2. 頒發二級證書(公鑰證書),signcert.pem為公鑰證書

vi signcert.cnf

[ req ]

default_bits = 2048

distinguished_name = req_distinguished_name

prompt = no

string_mask = utf8only

x509_extensions = extensions

[ req_distinguished_name ]

c = cn

o = test

cn = signing certificate

[ extensions ]

subjectkeyidentifier = hash

authoritykeyidentifier = keyid, issuer

basicconstraints = ca:false

keyusage = critical, nonrepudiation, digitalsignature

extendedkeyusage = codesigning

openssl genrsa -out signcert_pri.pem 2048

openssl req -new -config signcert.cnf -out signcert.csr -key signcert_pri.pem

openssl x509 -req -in signcert.csr -ca rootca.pem -cakey rootca_pri.pem -cacreateserial -out signcert.pem -days 3650 -extensions extensions -extfile signcert.cnf

openssl x509 -in signcert.pem -inform pem -outform der -out signcert.der

3. 建立cms簽名。

使用私鑰證書signcert.pem和私鑰signcert_pri.pem建立cms格式簽名。source.txt為簽名前原始檔案,signed_source.txt為簽名後檔案(signed_source.txt即為建立的cms簽名)

openssl cms -sign -in source.txt -inkey signcert_pri.pem -signer signcert.pem -out signed_source.txt -outform pem -nodetach

利用openssl 庫製作證書以及驗證

rsa證書 ca證書 openssl genrsa out cakey.key 1024 2048 這個命令會生成乙個1024 2048位的金鑰。openssl req new x509 key cakey.key out cacert.pem days 1234 這個命令將用上面生成的金鑰cake...

製作證書和私鑰

x.503證書的製作和私鑰.jks檔案製作 分兩套環境,linux下製作和windows下製作.1.linux環境下 確保已安裝了openssl,執行的命令如下 openssl req newkey rsa 2048 x509 days 5480 keyout ca syrcb root.pem o...

使用openssl工具集操作證書

1 生成根金鑰 openssl genrsa out root.key 2048 2 通過root.key生成證書請求 openssl req new key root.key out root.csr 這個過程中要求輸入 證書請求 中的相關資訊,如國家 城市 網域名稱等 3 簽名證書請求 open...