當前位置:編程學習大全網 - 編程語言 - OpenSSL詳細解釋

OpenSSL詳細解釋

對於剛接觸OpenSSL的人來說,最難的事情可能就是先理解各種概念。

公鑰/私鑰/簽名/驗證簽名/加密/解密/非對稱加密

我們壹般的加密是用壹個密碼加密文件,然後用同壹個密碼解密。這個很好理解。這是對稱加密。有些加密使用壹個密碼,而解密使用另壹組密碼。這被稱為不對稱加密,這意味著加密和解密的密碼是不同的。我怕第壹次接觸的人無論如何也理解不了。其實這是數學中素數相乘原理的壹個應用。如果壹定要看懂,百度有很多資料可以看。因此,這組密鑰中的壹個可用於加密數據,另壹個可用於解密數據。是的,公鑰和私鑰都可以用來加密數據。相反,當另壹個用來解密數據時,用公鑰加密數據,然後用私鑰解密。私鑰加密數據,公鑰解密壹般稱為簽名和驗證簽名。

因為用公鑰加密的數據只能用其對應的私鑰解密,所以妳可以把公鑰給人家,讓人家加密他要發給妳的數據。這些數據只有用私鑰傳到妳手裏,才能解密成有用的數據,別人才能得到,才能理解內容。同樣,如果妳用妳的私鑰對數據簽名,只有配對的公鑰才能解密數據,而只有妳有這個私鑰,所以如果配對的公鑰解密了數據,

在實際應用中,通常妳和對方交換公鑰,然後妳要發送給對方的數據用他的公鑰加密,他拿到後用他的私鑰解密。他要發給妳的數據是用妳的公鑰加密的,妳拿到後用妳的私鑰解密,最大程度的保證了安全性。

RSA/DSA/SHA/MD5

非對稱加密的算法有很多,比較著名的是RSA/DSA,但不同的是RSA可以用於加密/解密和簽名驗證,而DSA只能用於簽名。至於SHA,是和md5壹樣的算法,不用於加密/解密或者簽名,叫做digest算法。它是壹種根據數據內容生成定長摘要的算法,這串摘要值與原始數據有對應關系。也就是原始數據會生成這個匯總,但是這個匯總是無法恢復到原始數據的。嗯,壹般情況下,這個算法的作用是,如果妳稍微修改壹下原始數據,生成的匯總就不壹樣了。傳輸中的原始數據我再給妳匯總壹下。妳也可以對獲得的原始數據做壹個匯總算法,和給妳的匯總進行對比,就知道這個數據在傳輸過程中是否被修改過。

在實際應用過程中,由於要加密的數據可能非常大,加密起來費時費力,所以壹般先對原始數據進行匯總,再對抽象值進行加密,將原始數據的明文和加密後的抽象值傳輸給妳。這樣,通過解鎖加密的抽象值,並將其與得到的數據的抽象值對應起來,就可以知道數據是否被修改了。此外,因為只有您擁有私鑰,只有您可以解密抽象值,所以其他人甚至可以

CA/PEM/DER/X509/PKCS

通用公鑰不會以純文本的形式傳輸給其他人。正常情況下,會生成壹個文件。這個文件就是公鑰文件,然後這個文件就可以交給別人加密了。但是如果在傳輸過程中有人惡意破壞,妳就把妳的公鑰換成他的公鑰,然後得到公鑰方的加密數據。不是他可以用自己的密鑰解密數據嗎?為了解決這個問題,需要壹個公證人來做這件事。任何人都可以找到它來確認誰發送了公鑰。這就是CA,CA確認公鑰的原理也很簡單。它把自己的公鑰發布給每個人,然後壹個人想發布自己的公鑰,可以把自己的公鑰和壹些身份信息發送給CA,CA用自己的密鑰加密。這也可以稱為簽名。那麽這個包含您的公鑰和您的信息的文件可以被稱為證書文件。這樣,每個得到壹些公鑰文件的人都通過CA的公鑰解密文件。正常解密的話,秘密裏面的信息肯定是真的,因為加密方只能是CA,其他人沒有它的密鑰。這樣就可以解鎖公鑰文件,看看裏面的信息是不是妳需要加密的公鑰。

在實際應用中,大部分人不要求CA簽名,因為是為了錢,所以可以做壹個自簽名的證書文件,就是自己生成壹對密鑰,然後用自己生成的另壹對密鑰對密鑰進行簽名。這只針對真正需要簽署證書的人,普通的數據加解密可以直接用公鑰和私鑰來完成。

OpenSSL生成的密鑰文件的格式只有PEM和DER。PEM就是把密鑰編碼成base64,直接打開就能看到壹串英文字母。DER格式是壹個二進制密鑰文件,您可以看到...妳什麽都不懂!. X509是證書文件格式的通用定義。pkcs的壹系列標準是用於存儲密鑰的指定文件標準。妳只需要知道PEM DER X509 PKCS的這些格式是可以相互轉換的。

==結束blogs.com/phpinfo/archive/2013/08/09/3246376.html = =

為了便於理解,我畫了壹張圖,如下:

使用openssl生成證書(包括openssl細節)

壹、openssl簡介

Openssl是目前最流行的ssl密碼庫工具,它提供了壹個通用的、健壯的、功能齊全的工具套件來支持SSL/TLS協議的實現。

官方網站:PANY)【默認有限公司】:SunfoBank

組織單位名稱(如部門)[]:信息技術部

常用名(例如,您的姓名或服務器的主機名)[]:sunfobank.com

電子郵件地址[]:admin@sunfobank.com

[root @ szxjdwins 01-we b-27 cert]# ll

共計8個

-rw-r - r -。1 root root 1452 Jun 22 14:29 cert . CRT

-rw-r - r -。1 root root 1708 Jun 22 14:29 RSA _ private . key

OpenSSL req-new key RSA:2048-nodes-key out RSA _ private . key-x509-days 36500-out cert . CRT-subj "/C = CN/ST = GuangDong/L = ShenZhen/O = SunFoBank/OU = IT Dept/CN = sunfobank.com/emailAddress=admin@sunfobank.com "

openssl req -new -x509 -days 36500密鑰rsa_private.key -out cert.crt

第四,生成服務器簽名請求文件和CA簽名來頒發服務器證書()

Server.key建議不要添加密碼。如果加了密碼,每次重啟nginx都需要密碼,會影響效率。

Nginx配置只需要兩個文件,server.key和server.crt

OpenSSL gen RSA-AES 256-passout pass:111111-out server . key 2048

OpenSSL req-新密鑰服務器

[root @ szxjdwins 01-we b-27 cert]# OpenSSL gen RSA-AES 256-pass out pass:111111-out server . key 2048

生成RSA私鑰,2048位長模數

............................+++

.......+++

e是65537 (0x10001)

[root @ szxjdwins 01-we b-27 cert]# OpenSSL gen RSA-AES 256-out server . key 2048

生成RSA私鑰,2048位長模數

.............................................+++

........................................................+++

e是65537 (0x10001)

輸入服務器的密碼。key:1111111手動輸入密碼。

驗證-輸入服務器的通行短語,密鑰:1111111手動輸入密碼。

[root @ szxelab 01-we b-27 cert]# OpenSSL req-new-key server . key-out server . CSR

輸入server.key的密碼:

您將被要求輸入將被合並的信息

到您的證書申請中。

您將要輸入的是所謂的可分辨名稱或DN。

有相當多的字段,但妳可以留壹些空白

對於某些字段,將有壹個默認值,

如果妳輸入“.”,該字段將留空。

國家名稱(2個字母的代碼)[XX]:CN

州或省名(全稱)[]:廣東

地點名稱(如城市)[默認城市]:深圳

組織名稱(如公司)[默認有限公司]:太陽銀行

組織單位名稱(如部門)[]:信息技術部

常用名(例如,您的姓名或服務器的主機名)[]:sunfobank.com

電子郵件地址[]:admin@sunfobank.com

請輸入以下“額外”屬性

與您的證書申請壹起發送

質詢密碼[]:不要輸入密碼。

可選公司名稱[]:不要輸入密碼。

之後,輸入密碼和服務器證書信息,或者在命令行上指定各種參數。

OpenSSL req-new-key server . key-passin pass:11111-out server . CSR-subj "/C = CN/ST = GuangDong/L = ShenZhen/O = SunFoBank/OU = IT Dept/CN = sunfobank.com/emailAddress=admin@sunfobank.com "

* * *生成的csr簽名請求文件可以提交給CA進行發布* * *

卡特彼勒服務器. csr

-開始證書申請-

base64編碼數據

-結束證書申請-

OpenSSL req-noout-text-in server . CSR

OpenSSL x509-req-days 365000-in server . CSR-CA cert . CRT-CAkey RSA _ private . key-passin pass:1111111-cacreate serial-out server . CRT

[root @ szxelab 01-we b-27 cert]# OpenSSL x509-req-days 365000-in server . CSR-CA cert . CRT-CAkey RSA _ private . key-passin pass:111111-cacreate serial-out server . CRT

簽名沒問題

subject =/C = CN/ST = GuangDong/L = ShenZhen/O = SunFoBank/OU = IT Dept/CN = sunfobank.com/emailAddress=admin@sunfobank.com

獲取CA私鑰

CAxxx選項用於指定CA參數輸入。

[root @ szxelab 01-we b-27 cert]# ll

共計24人

-rw-r - r -。1 root root 1452 Jun 22 14:29 cert . CRT

-rw-r - r -。1 root root 17 Jun 22 15:07 cert . SRL

-rw-r - r -。1 root root 1708 Jun 22 14:29 RSA _ private . key

-rw-r - r -。1 root root 1334 Jun 22 15:07 server . CRT

-rw-r - r -。1 root root 1070 Jun 22 15:04 server . CSR

-rw-r - r -。1 root root 1766 Jun 22 14:54 server . key

此時在nginx上的任何操作都需要提示輸入server.key的密碼才能進行。

[root @ szxelab 01-we b-27 nginx]#/application/nginx/sbin/nginx-t

輸入PEM密碼短語:輸入密碼111111。

nginx:配置文件/application/nginx-1.12.2//conf/nginx . conf語法可以

例如,如果不輸入密碼,則需要將加密的server.key轉換為未加密的server.key。

[root @ szxelab 01-we b-27 cert]# OpenSSL RSA-in server . key-passin pass:111111-out server . key

正在寫入RSA密鑰

此時,nginx操作不會提示輸入密碼:

[root @ szxelab 01-we b-27 cert]#/application/nginx/sbin/nginx-t

nginx:配置文件/application/nginx-1.12.2//conf/nginx . conf語法可以

nginx:配置文件/應用程序/nginx-1.12.2//conf/nginx . conf測試成功

證書位置:

[root @ szxelab 01-we b-27 cert]# pwd

/應用程序/nginx/證書

[root @ szxelab 01-we b-27 cert]# ll

共計24人

-rw-r - r -。1 root root 1452 Jun 22 14:29 cert . CRT

-rw-r - r -。1 root root 17 Jun 22 15:07 cert . SRL

-rw-r - r -。1 root root 1708 Jun 22 14:29 RSA _ private . key

-rw-r - r -。1 root root 1334 Jun 22 15:07 server . CRT

-rw-r - r -。1 root root 1070 Jun 22 15:04 server . CSR

-rw-r - r -。1 root root 1679 Jun 22 15:19 server . key

至此,測試場景中私有證書的配置完成。

動詞 (verb的縮寫)證書查看和轉換

查看證書詳細信息

OpenSSL x509-in cert . CRT-noout-text

轉換證書編碼格式

OpenSSL x509-in cert . cer-inform DER-out form PEM-out cert . PEM

合成pkcs#12證書(包括私鑰)

* *將pem證書和私鑰轉移到pkcs#12證書* *

OpenSSL pkcs 12-export-in server . CRT-inkey server . key-passin pass:11111-password pass:11111-out server

其中,-export表示pkcs#12證書,-inkey指定私鑰文件,-passin指定私鑰(文件)的密碼(nodes未加密),-password指定p12文件的密碼(導入和導出)。

* *將pem證書和私鑰/CA證書合並到pkcs#12證書中* *

OpenSSL pkcs 12-export-in server . CRT-inkey server . key-passin pass:11111 \-chain-CAfile ca . CRT-password pass:11165438

其中-chain表示同時添加壹個證書鏈,-CAfile指定壹個CA證書,導出的p12文件將包含多個證書。(其他選項:-name可用於指定服務器證書別名;-caname用於指定ca證書的別名)

** pcks#12提取PEM文件(包括私鑰)**

OpenSSL pkcs 12-in server . p 12-pass pass:1111-pass out pass:111111111-out/server . PEM

其中-password指定p12文件的密碼(導入和導出),-passout是指輸出私鑰的加密密碼(nodes表示不加密)。

導出的文件為pem格式,包含證書和私鑰(pkcs#8):

箱包屬性

local keyid:97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40 subject =/C = CN/ST = GD/L = SZ/O = VI hoo/OU = dev/CN = vihoo.com/emailAddress=yy@vihoo.com

issuer =/C = CN/ST = GD/L = SZ/O = viroot/OU = dev/CN = viroot.com/emailAddress=yy@viroot.com-BEGIN CERTIFICATE-miidazccalmcccqciola 9/dcfejanbgkqhkig 9 w0 baqufadb 5 mqswcqydvqqgewjd

1LpQCA+2B6dn4scZwaCD - END證書-包屬性

local keyid:97 DD 46 3D 1E 91 EF 01 3B 2E 4A 75 81 4F 11 A6 E7 1F 79 40關鍵屬性:& lt沒有屬性& gt

- BEGIN加密私鑰-miievaibadanbgkqhkig 9 w 0 baqefaascbkywggsiageaoibaqdc/6rac 1 yap rnf

K9ZLHbyBTKVaxehjxzJHHw==

-結束加密私鑰-

僅提取私鑰

OpenSSL pkcs 12-in server . p 12-pass pass:1111-pass out pass:111111111-nocerts-out/out

僅提取證書(所有證書)

OpenSSL pkcs 12-in server . p 12-密碼傳遞:11111-no keys-out/key . PEM

僅提取ca證書。

OpenSSL pkcs 12-in server-all . p 12-密碼傳遞:11111-no keys-cacerts-out/cacert . PEM

僅提取服務器證書。

OpenSSL pkcs 12-in server-all . p 12-密碼通過:11111-no keys-clcerts-out/cert . PEM

六、openssl命令參考

  • 上一篇:參觀科技館觀後感
  • 下一篇:爸爸寫給壹周歲的小朵的壹封信
  • copyright 2024編程學習大全網