詳解如何使用openssl創(chuàng)建自簽名證書(shū)
概覽&證書(shū)的結(jié)構(gòu)&證書(shū)驗(yàn)簽
創(chuàng)建根證書(shū)
創(chuàng)建根密鑰 ca.key.pem
$ openssl genrsa -des3 -out ca/ca.key.pem 4096 Generating RSA private key, 4096 bit long modulus (2 primes) .........................................................................................................................................................................++++ ..........................................................++++ e is 65537 (0x010001) Enter pass phrase for ca.key.pem: Verifying - Enter pass phrase for ca.key.pem:
密碼 123456
我們?cè)谶@兒使用 RSA 4096, 因?yàn)楦C書(shū)不經(jīng)常使用,為了更好的安全性,我們使用較大的參數(shù)。
備注
生產(chǎn)環(huán)境一般都會(huì)有中間證書(shū),我們這兒為了方便省略了中間證書(shū)的簽發(fā)流程
-des 使用des cbc模式對(duì)私鑰文件進(jìn)行加密。
-des3 使用des3 cbc模式對(duì)私鑰文件進(jìn)行加密。 需要輸入密碼,秘鑰使用需要輸入密碼
-idea 使用idea cbc模式對(duì)私鑰文件進(jìn)行加密
-out 指定輸出私鑰文件名。
創(chuàng)建根證書(shū) ca.crt.pem
可以不用創(chuàng)建ca.csr.pem文件,直接生成ca.crt.pem文件,如果分成兩步,見(jiàn)下一小節(jié)
現(xiàn)在我們使用剛創(chuàng)建的根密鑰來(lái)創(chuàng)建我們的根證書(shū):
$ openssl req -key ca/ca.key.pem -new -x509 -days 3650 -sha256 -out ca/ca.crt -subj '/C=CN/ST=ShanDong/CN=demo.toolbox/O=dzb' Enter pass phrase for ca.key.pem:
req大致有3個(gè)功能:生成證書(shū)請(qǐng)求文件、驗(yàn)證證書(shū)請(qǐng)求文件和創(chuàng)建根CA
-config -key 指定私鑰 -new -sha256 哈希函數(shù) -out 輸出的文件 -days 有效期 -subj subj子參數(shù)詳解: 縮寫(xiě) 翻譯 英文對(duì)照 C 國(guó)家名稱縮寫(xiě) Country Name (2 letter code) ST 州或省名稱 State or Province Name (full name) L 城市或區(qū)域稱 Locality Name (eg, city) O 組織名(或公司名) Organization Name (eg, company) OU 組織單位名稱(或部門(mén)名) Organizational Unit Name (eg, section) CN 服務(wù)器域名/證書(shū)擁有者名稱 Common Name (e.g. server FQDN or YOUR name) emailAddress 郵件地址 Email
ca.crt的后綴名不加pem,是方便證書(shū)安裝的時(shí)候,系統(tǒng)可以識(shí)別,后續(xù)的crt不需要安裝,所以添加pem后綴,以區(qū)分格式
* 創(chuàng)建根證書(shū) ca.csr.pem ca.crt.pem
$ openssl req -new -key ca/ca.key.pem -sha256 -out ca/ca.csr.pem -subj '/C=CN/ST=ShanDong/CN=demo.toolbox/O=dzb' Enter pass phrase for ca.key.pem:
$ openssl x509 -req -days 3650 -in ca/ca.csr.pem -signkey ca/ca.key.pem -out ca/ca.crt
查看根證書(shū)
查看我們剛剛創(chuàng)建的根證書(shū):
$ openssl x509 -noout -text -in ca/ca.crt
主要檢查上面 -subj 填寫(xiě)的內(nèi)容和證書(shū)的有效期
Certificate: Data: Version: 3 (0x2) Serial Number: 71:34:01:05:eb:4b:f7:8c:09:c6:b0:ad:34:b4:aa:03:93:2b:fc:d8 Signature Algorithm: sha256WithRSAEncryption Issuer: C = CN, ST = ShanDong, CN = demo.toolbox, O = dzb Validity Not Before: Apr 24 02:08:43 2023 GMT Not After : Apr 21 02:08:43 2033 GMT Subject: C = CN, ST = ShanDong, CN = demo.toolbox, O = dzb Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (4096 bit) Modulus: 00:a7:cb:bb:f2:58:8b:17:60:6d:e3:c8:3f:ed:72: ... ... 73:ad:e1:de:d0:5b:d2:1d:3e:0c:55:a3:aa:b5:0c: 28:8c:b7 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: FE:D8:0D:72:BE:7B:21:48:1F:14:27:85:3C:9D:16:9E:25:D1:3B:4A X509v3 Authority Key Identifier: keyid:FE:D8:0D:72:BE:7B:21:48:1F:14:27:85:3C:9D:16:9E:25:D1:3B:4A X509v3 Basic Constraints: critical CA:TRUE Signature Algorithm: sha256WithRSAEncryption 24:1e:d8:40:7b:0e:3b:4b:96:51:ff:cb:a0:62:ba:e5:e9:55: ... ... a2:ba:44:ac:97:da:dc:24:d9:b7:5f:3a:fa:05:16:b8:2f:9e: 7a:45:89:fa:be:cf:e4:4e
創(chuàng)建服務(wù)器證書(shū)
現(xiàn)在讓我們使用上面創(chuàng)建的根證書(shū),創(chuàng)建一個(gè)我們可以使用的 https 證書(shū)。
創(chuàng)建服務(wù)器密鑰 server.key.pem
$ openssl genrsa -des3 -out server/server.key.pem 2048 Generating RSA private key, 2048 bit long modulus (2 primes) .......................................................+++++ ................................+++++ e is 65537 (0x010001) Enter pass phrase for server.key.pem: Verifying - Enter pass phrase for server.key.pem:
密碼 123456
備注
我們使用 2048 位的 RSA 證書(shū)是因?yàn)榉?wù)器證書(shū)會(huì)經(jīng)常使用,這樣可以降低CPU的壓力,而且并不影響安全性。
配置文件server.ini
cat > server/server.ini <<EOF [ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext [ req_distinguished_name ] [ req_ext ] subjectAltName = @alt_names [alt_names] DNS.1 = localhost IP.1 = 127.0.0.1 IP.2 = 169.254.4.58 IP.3 = 172.20.10.2 EOF
DNS可以配置多個(gè)
如果只對(duì)IP進(jìn)行簽名,可以如下配置(如果要修改IP,就從這之后進(jìn)行就行)
cat > server.ini <<EOF [ req ] default_bits = 2048 distinguished_name = req_distinguished_name req_extensions = req_ext [ req_distinguished_name ] countryName = Country Name (2 letter code) countryName_default = CN stateOrProvinceName = ShangHai stateOrProvinceName_default = ShangHai localityName = Locality Name (eg, city) localityName_default = ShangHai organizationName = Organization Name (eg, company) organizationName_default = dai commonName = Common Name (e.g. server FQDN or YOUR name) commonName_max = 64 commonName_default = server.toolbox [ req_ext ] subjectAltName = @alt_names [alt_names] IP = 169.254.4.58 EOF
DNS可以配置多個(gè)(對(duì)應(yīng)多個(gè)域名),IP也可以配置多個(gè)
生成服務(wù)器端證書(shū)==請(qǐng)求文件== server.csr.pem
$ openssl req -sha256 -new -key server/server.key.pem -config server/server.ini -out server/server.csr.pem -subj '/C=CN/ST=ShangHai/CN=server.toolbox/O=dai' $ openssl req -sha256 -new -key server/server.key.pem -config server/server.ini -out server/server.csr.pem
第一種方式,通過(guò) -subj配置了證書(shū)授權(quán)對(duì)象的信息
第二種方式,通過(guò)配置文件確定,在執(zhí)行過(guò)程中,會(huì)要求確認(rèn),可以在這個(gè)過(guò)程中進(jìn)行修改
生成服務(wù)器端證書(shū) server.crt.pem
openssl x509 -req -days 3650 \ -CA ca/ca.crt -CAkey ca/ca.key.pem -CAcreateserial \ -in server/server.csr.pem -out server/server.crt.pem\ -extensions req_ext -extfile server/server.ini
一定要加-extfile server/server.ini
否則最后簽發(fā)的證書(shū)內(nèi)不會(huì)有IP和域名的信息
查看服務(wù)器端請(qǐng)求文件
$ openssl x509 -noout -text -in server/server.crt.pem
Certificate: Data: Version: 3 (0x2) Serial Number: 61:79:bd:82:c8:1e:2a:27:6f:a9:34:c8:92:f8:54:3f:22:de:80:0b Signature Algorithm: sha256WithRSAEncryption Issuer: C = CN, ST = ShanDong, CN = demo.toolbox, O = dzb Validity Not Before: Apr 24 02:19:50 2023 GMT Not After : Apr 21 02:19:50 2033 GMT Subject: C = CN, ST = ShangHai, CN = server.toolbox, O = dai Subject Public Key Info: Public Key Algorithm: rsaEncryption RSA Public-Key: (2048 bit) Modulus: 00:b1:de:96:bb:43:4b:fb:46:99:7e:be:61:c1:46: ... ... 4a:18:24:b3:79:8c:ff:35:d1:3a:4e:a3:11:02:2c: 98:ff Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Alternative Name: DNS:localhost, IP Address:127.0.0.1, IP Address:169.254.4.58, IP Address:172.20.10.2 Signature Algorithm: sha256WithRSAEncryption 07:c8:2a:e0:e7:14:86:23:3b:72:38:7f:f8:cc:90:54:f2:fa: ... ... c2:82:8a:2f:c0:a3:42:78:91:45:92:73:a4:aa:f2:ca:c1:5a: 58:c0:41:f0:ea:65:43:9e
要檢查授權(quán)的DNS和IP
以上就是詳解如何使用openssl創(chuàng)建自簽名證書(shū)的詳細(xì)內(nèi)容,更多關(guān)于openssl創(chuàng)建自簽名證書(shū)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例
這篇文章主要介紹了C++ 實(shí)現(xiàn)稀疏矩陣的壓縮存儲(chǔ)的實(shí)例的相關(guān)資料,M*N的矩陣,矩陣中有效值的個(gè)數(shù)遠(yuǎn)小于無(wú)效值的個(gè)數(shù),且這些數(shù)據(jù)的分布沒(méi)有規(guī)律,需要的朋友可以參考下2017-07-07簡(jiǎn)單了解設(shè)計(jì)模式中的裝飾者模式及C++版代碼實(shí)現(xiàn)
這篇文章主要介紹了簡(jiǎn)單了解設(shè)計(jì)模式中的裝飾者模式及C++版代碼實(shí)現(xiàn),ConcreteComponent的引用(指針)也可以達(dá)到修飾的功能,需要的朋友可以參考下2016-03-03深入了解C語(yǔ)言結(jié)構(gòu)化的程序設(shè)計(jì)
這篇文章主要介紹了C語(yǔ)言編程中程序的一些基本的編寫(xiě)優(yōu)化技巧,文中涉及到了基礎(chǔ)的C程序內(nèi)存方面的知識(shí),非常推薦!需要的朋友可以參考下2021-07-07C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有顏色彈跳小球
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言基于EasyX庫(kù)實(shí)現(xiàn)有顏色彈跳小球,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C語(yǔ)言模擬實(shí)現(xiàn)動(dòng)態(tài)通訊錄
本文主要介紹了C語(yǔ)言模擬實(shí)現(xiàn)動(dòng)態(tài)通訊錄,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-07-07C語(yǔ)言?棧與數(shù)組的實(shí)現(xiàn)詳解
棧(stack)又名堆棧,它是一種運(yùn)算受限的線性表。限定僅在表尾進(jìn)行插入和刪除操作的線性表。這一端被稱為棧頂,相對(duì)地,把另一端稱為棧底。向一個(gè)棧插入新元素又稱作進(jìn)棧、入?;驂簵#前研略胤诺綏m斣氐纳厦?,使之成為新的棧頂元素2022-04-04