實現(xiàn)HTTPS系列第五彈(終章)之【通過OpenSSL實現(xiàn)HTTPS】

博文說明【前言】:

在十堰鄖陽等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供成都網(wǎng)站設(shè)計、成都網(wǎng)站制作 網(wǎng)站設(shè)計制作按需網(wǎng)站建設(shè),公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),品牌網(wǎng)站建設(shè),成都全網(wǎng)營銷推廣,外貿(mào)網(wǎng)站建設(shè),十堰鄖陽網(wǎng)站建設(shè)費(fèi)用合理。

    本文為實現(xiàn)HTTPS系列終章,將通過個人口吻從開始到結(jié)束,詳細(xì)的講解OpenSSL安裝、密鑰生成、CSR生成,證書生成,ROOT CA創(chuàng)建等配置過程以及httpd的安裝及配置。

    如想快速實現(xiàn)配置,可以直接拉到文章末尾,我將配置命令挑出來進(jìn)行了總結(jié)。

    在目前時間點【2017年6月7號】下,所掌握的技術(shù)水平有限,可能會存在不少知識理解不夠深入或全面,望大家指出問題共同交流,在后續(xù)工作及學(xué)習(xí)中如發(fā)現(xiàn)本文內(nèi)容與實際情況有所偏差,將會完善該博文內(nèi)容。

1、第一彈:實現(xiàn)HTTPS系列第一彈之【http,https,www,web等概念簡介】

博文鏈接:http://watchmen.blog.51cto.com/6091957/1922919

2、第二彈:實現(xiàn)HTTPS系列第二彈之【非對稱加密,公鑰私鑰,數(shù)字簽名,OpenSSL及HTTPS等概念簡介】

博文鏈接:http://watchmen.blog.51cto.com/6091957/1923426

3、第三彈:實現(xiàn)HTTPS系列第三彈之【數(shù)字簽名,數(shù)字證書,CA認(rèn)證等概念理解】

博文鏈接:http://watchmen.blog.51cto.com/6091957/1924747

4、第四彈:實現(xiàn)HTTPS系列第四彈之【TLS ,SSL概念理解】

博文鏈接:http://watchmen.blog.51cto.com/6091957/1927937

參考文獻(xiàn):

1、https://www.openssl.org/

2、參考文檔:Ivan Ristic - Bulletproof SSL and TLS 【巨牛逼,圣經(jīng),經(jīng)典,必讀】

下載鏈接:http://down.51cto.com/data/2306452

3、參考文檔:Ivan Ristic - openssl-cookbook【經(jīng)典必讀】

下載鏈接:http://down.51cto.com/data/2315234


正文:

1、OpenSSL是一個開源項目,它是實現(xiàn)傳輸層安全(TLS)和安全套接層(SSL)協(xié)議的一個實現(xiàn)了健壯性,商業(yè)性,和功能性的工具集。即:openssl是tls/ssl的一個開源實現(xiàn),類似openssh是ssh的一個開源實現(xiàn),是裝在服務(wù)器上的一個軟件。

2、Web服務(wù)器在默認(rèn)情況下使用HTTP協(xié)議(純文本協(xié)議)進(jìn)行數(shù)據(jù)的傳輸,HTTP不會對傳輸中的數(shù)據(jù)進(jìn)行任何形式的加密。因此這就導(dǎo)致它在安全方面有重大缺陷。常見的安全問題例如:網(wǎng)絡(luò)中間人通過抓包工具,能夠看到任何經(jīng)過的數(shù)據(jù)包內(nèi)容,并且甚至可以在網(wǎng)絡(luò)上設(shè)置一個WEB服務(wù)器假冒真是服務(wù)器。在這種情況下,終端用戶很有可能實際上不是與真實服務(wù)器進(jìn)行數(shù)據(jù)交, 為了解決這些安全問題,大部分公司一般在他們的web服務(wù)器應(yīng)用HTTPS協(xié)議。而對于那種類型為只提供訪問下載的網(wǎng)站,也即用戶只能讀取內(nèi)容,并沒有實際提交任何信息,HTTP仍然是一個可行的選擇。但是,對于保存敏感信息的網(wǎng)站,比如:用戶需要登錄來獲得網(wǎng)站的服務(wù),那么HTTPS是必須的。 HTTPS能夠為一個網(wǎng)站提供以下能力。 1)確保所有經(jīng)過服務(wù)器傳輸?shù)臄?shù)據(jù)包都是經(jīng)過加密的。 2)建立了一個官方數(shù)字證書證書,使得假冒服務(wù)器無法冒充真正的服務(wù)器。

3、openssl版本在1.0.x以上才開始支持TLS1.1和TLS1.2,之前版本不支持,為達(dá)到版本要求的建議安裝新版本

4、X.509是由國際電信聯(lián)盟(ITU-T)制定的數(shù)字證書標(biāo)準(zhǔn),也就是說這是一種證書標(biāo)準(zhǔn),不是證書格式,類似POSIX對于Linux。

5、apache 2.4.x 系列和 openssl 1.1.x系列不兼容

環(huán)境信息

  • 操作系統(tǒng)信息

weblogic@suse11-weblogic:~> cat /etc/SuSE-release 
SUSE Linux Enterprise Server 11 (x86_64)
VERSION = 11
PATCHLEVEL = 0 
weblogic@suse11-weblogic:~> uname -r
2.6.27.19-5-default
注釋:請無視我的內(nèi)核和系統(tǒng)版本,目前維護(hù)的生產(chǎn)系統(tǒng)版本從SLES 11 sp0到sp4都有,因此新建了對應(yīng)虛擬機(jī),一不小心挑了臺最低版本的,不過不影響,這樣反而更具有代表性。

  • 系統(tǒng)自帶的openssl詳細(xì)版本信息:openssl version -a

weblogic@suse11-weblogic:~> openssl version -a
OpenSSL 0.9.8h 28 May 2008
built on: Sat Feb 21 02:45:26 UTC 2009
platform: linux-x86_64
options:  bn(64,64) md2(int) rc4(ptr,int) des(idx,cisc,4,long) blowfish(idx) 
compiler: gcc -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -DL_ENDIAN -DNO_ASM -DMD32_REG_T=int -fmessage-length=0 -O2 -Wall -D_FORTIFY_SOURCE=2 -fstack-protector -funwind-tables -fasynchronous-unwind-tables -g -fomit-frame-pointer -fno-strict-aliasing -DTERMIO -Wall -fstack-protector -fprofile-use 
OPENSSLDIR: "/etc/ssl"

注意:命令末尾的OPENSSLDIR: "/etc/ssl",指的是openssl的配置文件和證書的存放路徑

可以看到,本人的Openssl是0.9.8h,不支持最新的協(xié)議,因此建議安裝最新版的openssl,下方內(nèi)容將介紹整個配置過程。

1、編譯安裝最新版本openssl

安裝版本:openssl-1.1.0e.tar.gz 下載鏈接:http://www.openssl.org/source

suse11-weblogic:/home/weblogic # tar -xzf openssl-1.1.0e.tar.gz
suse11-weblogic:/home/weblogic/openssl-1.1.0e # ./config --prefix=/opt/openssl --openssldir=/opt/openssl enable-ec_nistp_64_gcc_128

suse11-weblogic:/home/weblogic/openssl-1.1.0e # echo $? 檢查輸出是否為0

make的時候出現(xiàn)報錯:

suse11-weblogic:/home/weblogic/openssl-1.1.0e # make
......中間輸出省略
Please run the same make command again
make: *** [configdata.pm] 錯誤 1

問題原因為虛擬機(jī)時間與實際時間不對,虛擬機(jī)的時間是2016年,而該版本是2017年2月16號發(fā)布的,因此系統(tǒng)檢測出時間異常,導(dǎo)致這個報錯異常,將時間重新設(shè)置之后,問題解決,可以繼續(xù)正常make下去。 解決過程:

suse11-weblogic:/home/weblogic/openssl-1.1.0e # date -s "2017-05-23 16:27:00"
suse11-weblogic:/home/weblogic/openssl-1.1.0e # hwclock -w  
重新設(shè)置系統(tǒng)時間,并將系統(tǒng)時間同步到硬件時鐘時間。
suse11-weblogic:/home/weblogic/openssl-1.1.0e # make
suse11-weblogic:/home/weblogic/openssl-1.1.0e # make install
suse11-weblogic:/home/weblogic/openssl-1.1.0e # ln -s /opt/openssl/lib/libssl.so.1.1 /usr/lib64/libssl.so.1.1
suse11-weblogic:/home/weblogic/openssl-1.1.0e # ln -s /opt/openssl/lib/libcrypto.so.1.1 /usr/lib64/libcrypto.so.1.1
注意:需要將新版本(1.1.0e)的相關(guān)庫文件放置到相關(guān)位置下,因為openssl命令正確執(zhí)行需要讀取這些動態(tài)鏈接庫

suse11-weblogic:~ # vim /etc/profile
在文件末尾添加一行然后保存退出:export PATH=/opt/openssl/bin:$PATH
suse11-weblogic:~ # source /etc/profile

2、openssl支持命令及參數(shù)

openssl是一個密碼工具集,包含了許多命令實現(xiàn)不同的功能。

suse11-weblogic:/opt/openssl/bin # openssl  help

Standard commands
asn1parse caciphers   cms   
crl   crl2pkcs7 dgst  dhparam   
dsa   dsaparam  ececparam   
enc   engineerrstrexit  
gendsagenpkey   genrsahelp  
list  nseq  ocsp  passwd
pkcs12pkcs7 pkcs8 pkey  
pkeyparam pkeyutl   prime rand  
rehashreq   rsa   rsautl
s_client  s_server  s_timesess_id   
smime speed spkac srp   
tsverifyversion   x509  

Message Digest commands (see the `dgst' command for more details)
blake2b512blake2s256gost  md4   
md5   mdc2  rmd160sha1  
sha224sha256sha384sha512

Cipher commands (see the `enc' command for more details)
aes-128-cbc   aes-128-ecb   aes-192-cbc   aes-192-ecb   
aes-256-cbc   aes-256-ecb   base64bf
bf-cbcbf-cfbbf-ecbbf-ofb
camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  camellia-192-ecb  
camellia-256-cbc  camellia-256-ecb  cast  cast-cbc  
cast5-cbc cast5-cfb cast5-ecb cast5-ofb 
des   des-cbc   des-cfb   des-ecb   
des-ede   des-ede-cbc   des-ede-cfb   des-ede-ofb   
des-ede3  des-ede3-cbc  des-ede3-cfb  des-ede3-ofb  
des-ofb   des3  desx  idea  
idea-cbc  idea-cfb  idea-ecb  idea-ofb  
rc2   rc2-40-cbcrc2-64-cbcrc2-cbc   
rc2-cfb   rc2-ecb   rc2-ofb   rc4   
rc4-40seed  seed-cbc  seed-cfb  
seed-ecb  seed-ofb

這里編輯器把空格空行都刪除,因此排版不對了,沒辦法,正確格式自己敲命令看下吧

第一段:顯示所有可用的命令

第二段:顯示支持的所有信息摘要算法

第三段:顯示支持的所有加密命令

3、配置openssl

配置openssl一般遵循以下幾個步驟:

1、生成密鑰

2、根據(jù)密鑰生成證書簽名請求(CSR),并把它發(fā)送給CA

3、CA接受CSR,生成證書

4、獲取下發(fā)證書,開始使用

3.1、密鑰生成

openssl支持RSA、DSA、ECDSA三種算法,但不是所有算法適合所有情況,通常我們web服務(wù)器都是會選擇使用RSA算法,因為DSA只被效支持到1024位(IE瀏覽器最大只支持識別1024位),但這并不代表DSA只支持到1024位;而ECDSA算法通常是被CA廣泛支持;對應(yīng)SSH來說,DSA和RSA會被廣泛使用,因為ECDSA不被所有的客戶端支持,ssh的時候可能會出現(xiàn)問題。

建議配置:RSA、DSA使用2048位,ECDSA使用至少256bit

  • 3.1.1、使用RSA加密算法生成密鑰

關(guān)于密鑰的長度,RSA默認(rèn)的長度(RSA默認(rèn)使用512 bit)非常不安全,建議修改為高強(qiáng)度的位數(shù)

suse11-weblogic:/opt/openssl/bin # openssl genrsa -aes128 -out fd.key 2048
注釋:生成ras算法的密鑰,位數(shù)為2048位,使用的對稱加密算法是AES 128,此處需要輸入指定密鑰密碼,密鑰格式為PEM格式。

suse11-weblogic:/opt/openssl/bin #openssl rsa -in fd.key -pubout -out fd-public.key
注釋:從密鑰中將公鑰單獨抽離生成出來,此處需要輸入上方密鑰的密碼

查看密鑰命令:

1、查看密鑰的內(nèi)容:cat fd.key

2、查看密鑰的結(jié)構(gòu)和內(nèi)容:openssl rsa -text -in fd.key

  • 3.1.2、使用DSA加密算法生成密鑰

DSA密鑰的生成需要2個步驟:先生成DSA配置參數(shù),然后才能真正生成密鑰,而不是像RSA那樣直接一條命令就可以生成密鑰

suse11-weblogic:/opt/openssl/private # openssl dsaparam  -genkey 2048 | openssl dsa -out dsa.key -aes128
注釋:生成DSA算法的密鑰,密鑰長度為2048位,使用的對稱加密算法是AES 128,此處需要輸入指定密鑰密碼,密鑰格式為PEM

suse11-weblogic:/opt/openssl/private # openssl dsa -in dsa.key -pubout -out dsa-public.key
注釋:從密鑰中將公鑰單獨抽離生成出來,此處需要輸入上方密鑰的密碼

查看密鑰命令:

1、查看密鑰的內(nèi)容:cat dsa.key

2、查看密鑰的結(jié)構(gòu)和內(nèi)容:openssl dsa -text -in dsa.key

  • 3.1.3、使用ECDSA加密算法生成密鑰

ECDSA密鑰的生成需要也需要2個步驟:先生成ECDSA配置參數(shù),然后才能真正生成密鑰

suse11-weblogic:/opt/openssl/private # openssl ecparam -genkey -name secp256r1 | openssl ec -out ec.key -aes128
注釋:生成ECDSA算法的密鑰,密鑰長度為256位,使用的對稱加密算法是AES 128,此處需要輸入指定密鑰密碼,密鑰格式為PEM

suse11-weblogic:/opt/openssl/private # openssl ec -in ec.key -pubout -out ec-public.key
注釋:從密鑰中將公鑰單獨抽離生成出來,此處需要輸入上方密鑰的密碼

查看密鑰命令:

1、查看密鑰的內(nèi)容:cat ec.key

2、查看密鑰的結(jié)構(gòu)和內(nèi)容:openssl ec -text -in ec.key

3.2、生成證書簽名請求(CSR)

擁有了密鑰之后,我們就能把密鑰發(fā)送給CA,并請求CA給我們生成證書,也就是:Certificate Signing Request(CSR)

CSR信息中包含:請求者的公鑰信息以及申請信息,這2個信息后續(xù)將會包含在CA下發(fā)的證書中。

  • 3.2.1、初始全新生成CSR

注意:生成CSR的過程是一個需要交互的過程,需要用戶提供用戶生成個性化證書的個性化信息,如果你不想輸入這心信息,你必須在命令行輸入一個點“.”,而不是僅僅回車。如果你真的不輸入任何信息,那么openssl將會使用默認(rèn)值去填充這部分申請信息(不建議使用默認(rèn)值)

suse11-weblogic:/opt/openssl/private # openssl req -new -key fd.key -out fd.csr
Enter pass phrase for fd.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:BJ
Locality Name (eg, city) []:BJ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:PICC
Organizational Unit Name (eg, section) []:PICC
Common Name (e.g. server FQDN or YOUR name) []:watchmen.blog.51cto.com
Email Address []:568100840@qq.com

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

注釋:關(guān)于challenge password詳見 RFC 2985,這是最新推出的一個可選項,用于證書撤銷時使用,如果你輸入了這個密碼,這個信息將會包含在發(fā)送給CA的CSR中,基本上CA都不使用參數(shù),大部分文檔建議保留這個選項為空,并且這個選型的存在與否對這個密鑰的安全性沒有任何影響

  • 3.2.2、根據(jù)現(xiàn)有證書中的申請信息再次生成原始CSR

如果你的證書即將到期,你需要更新證書,但是還是希望使用原有的公鑰和申請信息,那么你就可以使用這種方式,利用現(xiàn)有證書的信息再次生成CSR

suse11-weblogic:/opt/openssl/private # openssl x509 -x509toreq -in fd.crt -out fd.csr -signkey fd.key

注釋:這里不說啥了,自己看吧。
  • 3.2.3、使用配置文件中的申請信息靜默生成CSR

有些時候,我們不方便或者想節(jié)約時間,那么就可以事先將申請信息寫入配置文件,然后加載配置文件生成CSR

suse11-weblogic:/opt/openssl/private # vim fd.cnf

[req]
prompt = no
distinguished_name = dn
req_extensions = ext
input_password = 111111
[dn]
CN = watchmen.blog.51cto.com
emailAddress = 568100840.com
O = PICC
L = BJ
C = CN
[ext]
subjectAltName = DNS:www.51cto.com,DNS:51cto.com

注釋:以上為文件內(nèi)容,111111為密鑰的密碼,ext字段在下文會講到,為多站點分配證書

suse11-weblogic:/opt/openssl/private # openssl req -new -config fd.cnf -key fd.key -out fd-second.csr

注釋:親測,確實省事。

3.3、接受CSR,生成證書

在CSR生成之后,你可以發(fā)送CSR給當(dāng)前互聯(lián)網(wǎng)上的知名CA結(jié)構(gòu)請求證書(當(dāng)然,是要收費(fèi)的啦)或者自己處理這個請求(yes,免費(fèi))

  • 發(fā)送CSR之前,先檢查一遍,以下為查看CSR命令:

suse11-weblogic:/opt/openssl/private # openssl req -text -in fd.csr -noout

Certificate Request:
Data:
Version: 1 (0x0)
Subject: C = CN, ST = BJ, L = BJ, O = PICC, OU = PICC, CN = watchmen.blog.51cto.com, emailAddress = 568100840@qq.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:b7:78:2a:5b:75:41:eb:01:40:4c:55:b1:35:74:
35:4d:ae:91:77:96:0b:ac:74:0f:cc:47:28:bc:31:
...太多省略...
Exponent: 65537 (0x10001)
Attributes:
a0:00
Signature Algorithm: sha256WithRSAEncryption
 22:c3:78:2c:18:3b:e5:34:95:bd:9a:08:cc:12:b4:42:75:3d:
 73:8f:d5:8e:ff:50:a3:df:29:e6:62:ba:2a:38:46:da:eb:42:
...太多省略...


3.3.1、生成自簽名證書

suse11-weblogic:/opt/openssl/private # openssl x509 -req -days 3650 -in fd.csr -signkey fd.key -out fd.crt

Signature ok
subject=C = CN, ST = BJ, L = BJ, O = PICC, OU = PICC, CN = watchmen.blog.51cto.com, emailAddress = 568100840@qq.com
Getting Private key
Enter pass phrase for fd.key:【這里輸入密鑰的密碼】

注釋:有效期3650天,也就是10年,不說啥了,各位看官看命令。

福利來了,openssl提供了更簡單粗暴的方法,不需要先生成CSR就可以根據(jù)密鑰直接一步申請證書

1)需要交互手動輸入CSR申請信息:

openssl req -new -x509 -days 3650 -key fd.key -out fd.crt

2)無需交互手動輸入CSR申請信息:

openssl req -new -x509 -days 3650 -key fd.key -out fd.crt -subj "/C=CN/L=BJ/O=PICC/CN=watchmen.blog.51cto.com"
  • 3.3.2、給多主機(jī)生成自簽名證書

默認(rèn)情況下,openssl生成證書僅僅針對一個申請用戶,也就是說如果用戶有一批相關(guān)的web站點需要申請證書,你也只能為每個站點分配不同的證書 但這僅僅是默認(rèn)。

目前有2種實現(xiàn)方式可以為多主機(jī)分配證書,具體使用哪種根據(jù)實際情況決定

1、列出所有需要證書的站點

2、使用通配符匹配需要證書的站點

實際上你應(yīng)該使用這種方式:51cto.com和*.51cto.com;也就是列出主域名,使用通配符匹配任意的子域名

1)生成站點域名配置文件

suse11-weblogic:/opt/openssl/private # vim fd.ext

subjectAltName = DNS:*.51cto.com, DNS:51cto.com

注釋:以上為fd.ext文件內(nèi)容

2)生成多站點證書

suse11-weblogic:/opt/openssl/private # openssl x509 -req -days 365 -in fd.csr -signkey fd.key -out fd-second.crt -extfile fd.ext

Signature ok
subject=C = CN, ST = BJ, L = BJ, O = PICC, OU = PICC, CN = watchmen.blog.51cto.com, emailAddress = 568100840@qq.com
Getting Private key
Enter pass phrase for fd.key:【這里輸入密鑰密碼】


注釋:這里要有密鑰文件,CSR文件存在,可自行結(jié)合使用(跳過CSR生成步驟)
  • 3.3.3、檢查證書

suse11-weblogic:/opt/openssl/private # openssl x509 -text -in fd.crt -noout

Certificate:
Data:
    Version: 1 (0x0)
    Serial Number:
        bd:8f:b6:44:4f:2f:d6:93
Signature Algorithm: sha256WithRSAEncryption
    Issuer: C = CN, ST = BJ, L = BJ, O = PICC, OU = PICC, CN = watchmen.blog.51cto.com, emailAddress = 568100840@qq.com
    Validity
        Not Before: May 23 16:31:29 2017 GMT
        Not After : May 21 16:31:29 2027 GMT
    Subject: C = CN, ST = BJ, L = BJ, O = PICC, OU = PICC, CN = watchmen.blog.51cto.com, emailAddress = 568100840@qq.com
    Subject Public Key Info:
        Public Key Algorithm: rsaEncryption
            Public-Key: (2048 bit)
            Modulus:
                00:b7:78:2a:5b:75:41:eb:01:40:4c:55:b1:35:74:
                35:4d:ae:91:77:96:0b:ac:74:0f:cc:47:28:bc:31:
                ...太多,略...
            Exponent: 65537 (0x10001)
Signature Algorithm: sha256WithRSAEncryption
     12:3a:c2:5f:c2:5f:8c:f7:2d:c4:39:30:6f:ff:d8:e9:46:a9:
     d6:e4:4d:f8:9d:2a:ce:31:1d:74:25:35:6a:07:52:bb:7c:0c:
     ...太多,略...

自簽名證書通常只包含這些基本證書數(shù)據(jù),而相比之下,CA機(jī)構(gòu)頒發(fā)的證書則會有一些額外的字段

  • KU(Key Usage)、EKU(Extended Key Usage) 這2個參數(shù)限制了什么證書可以被使用,當(dāng)這2個參數(shù)開啟時,只有在在列表中的用戶才允許使用這個證書,當(dāng)這個參數(shù)未開啟的時候,就沒有任何的使用限制。以下就是一個例子

X509v3 Key Usage: critical   
Digital Signature, Key Encipherment   
X509v3 Extended Key Usage:    
TLS Web Server Authentication, TLS Web Client Authentication

  • CRL(Certificate Revocation List) 證書撤銷列表

這個列表可以用于列出客戶機(jī)或服務(wù)器用戶不應(yīng)再信任的所有證書和密鑰,一般是定期發(fā)布(例如每7天更新)

列表文件下載地址:http://crl.starfieldtech.com/sfs3-20.crl

  • 3.3.4、證書類型

密鑰和證書可以被存儲成各種形式,也就是說,在傳輸過程中可能會需要你進(jìn)行格式的轉(zhuǎn)換

1)證書類型--DER(Binary)

這種類型的證書是原生x.509標(biāo)準(zhǔn)證書,沒有做其他處理,使用編碼為:DER ASN.1

2)證書類型--PEM(ASCII)

這種類型的證書包含編碼為base64的DER原生證書,整個證書格式以:-----BEGIN CERTIFICATE-----開始,以-----END CERTIFICATE-----結(jié)束。

3)證書類型--PKCS#7

這種類型的證書比較少見,感興趣的小伙伴可以去看RFC 2315 此處略

4)密鑰類型--DER(Binary)

這種類型的密鑰被存儲成原生形式,使用編碼為:DER ASN.1

5)密鑰類型--PEM(ASCII)

這種類型的密鑰包含編碼為base64的DER原生密鑰,有時會包含額外的一些元數(shù)據(jù),比如使用的算法類型

6)密鑰&&證書類型--PKCS#12 (PFX)

這種復(fù)雜的類型可以保護(hù)密鑰和證書鏈,它的擴(kuò)展名一般是.p12和.pfx,這種類型一般用在微軟系列的產(chǎn)品中

  • 3.3.5、證書類型轉(zhuǎn)換

1)PEM類型轉(zhuǎn)換成DER

suse11-weblogic:/opt/openssl/certs # openssl  x509 -inform PEM -in fd.crt  -outform DER -out fd.der

2)DER類型轉(zhuǎn)換成PEM

suse11-weblogic:/opt/openssl/certs # openssl x509 -inform DER -in fd.der -outform PEM -out fd.pem

關(guān)于其他的不常用的類型轉(zhuǎn)換,這里不再寫出,感興趣的小伙伴可以自己看書,書中都寫的很清楚。

4、自定義CA中心(Certificate Authority )

好,重點知識來了,這一章節(jié)中,將會講解如何建立你自己的CA中心,openssl已經(jīng)提供了建立CA的所需全部東西,但是沒有提供比如圖形等比較友善的配置界面,全都是以命令行的形式來配置了,從另一個角度來說,通過命令行配置會更專業(yè)和高效直接,并且命令行也能幫助你理解。

建立并運(yùn)行私人CA面臨的最大挑戰(zhàn)不是如何設(shè)置,而是如何確?;A(chǔ)設(shè)施的安全,也就是保證這臺CA服務(wù)器的安全,例如,root key必須以離線的方式保存,因為它是所有的安全得以保證的根源。另一方面,CRL和OCSP等這些過期證書列表必須定期更新(crl上面有說到,OCSP是實時證書在線驗證協(xié)議,是對CRL機(jī)制的彌補(bǔ),通過OCSP,瀏覽器可以實時的向CA機(jī)構(gòu)驗證證書)

通過本章節(jié),你會創(chuàng)建出2個配置文件,一個用于控制根CA(root CA)的root-ca.conf,以及用于控制根CA的下屬CA的sub-ca.conf

  • Root CA Configuration-創(chuàng)建root-ca.conf配置文件

在開始創(chuàng)建CA之前,我們需要準(zhǔn)備一個配置文件(root-ca.conf),這個文件將告訴我們我們配置的究竟是什么東西。這是一個可選項,在一些配置中,這個操作可以被省略,但如果牽扯到一些復(fù)雜操作時,這個文件還是很有用的,在實際開始操作之前我們先來熟悉下這個配置文件,后期我們的配置將會使用到這個配置。

root-ca.conf配置文件的內(nèi)容格式大概下這個樣子:

[default]
name = root-ca
domain_suffix = example.com
aia_url = http://$name.$domain_suffix/$name.crt
crl_url = http://$name.$domain_suffix/$name.crl
ocsp_url = http://ocsp.$name.$domain_suffix:9080
default_ca = ca_default
name_opt = utf8,esc_ctrl,multiline,lname,align

[ca_dn]
countryName = "CN"
organizationName = "Example"
commonName = "Root CA

[ca_default]
home = .
database = $home/db/index
serial = $home/db/serial
crlnumber = $home/db/crlnumber
certificate = $home/$name.crt
private_key = $home/private/$name.key
RANDFILE = $home/private/random
new_certs_dir = $home/certs
unique_subject = no
copy_extensions = none
default_days = 3650
default_crl_days = 365
default_md = sha256
policy = policy_c_o_match

[policy_c_o_match]
countryName = match
stateOrProvinceName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

[req]
default_bits = 4096
encrypt_key = yes
default_md = sha256
utf8 = yes
string_mask = utf8only
prompt = no
distinguished_name = ca_dn
req_extensions = ca_ext

[ca_ext]
basicConstraints = critical,CA:true
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash

[sub_ca_ext]
authorityInfoAccess = @issuer_info
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:true,pathlen:0
crlDistributionPoints = @crl_info
extendedKeyUsage = clientAuth,serverAuth
keyUsage = critical,keyCertSign,cRLSign
nameConstraints = @name_constraints
subjectKeyIdentifier = hash

[crl_info]
URI.0 = $crl_url

[issuer_info]
caIssuers;URI.0 = $aia_url
OCSP;URI.0 = $ocsp_url

[name_constraints]
permitted;DNS.0=example.com
permitted;DNS.1=example.org
excluded;IP.0=0.0.0.0/0.0.0.0
excluded;IP.1=0:0:0:0:0:0:0:0/0:0:0:0:0:0:0:0

[ocsp_ext]
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
extendedKeyUsage = OCSPSigning
keyUsage = critical,digitalSignature
subjectKeyIdentifier = hash

注釋:

第一段:定義一些CA的基本信息

第二段:[ca_dn]中包含國家和組織等字段,而知名的收費(fèi)CA是不會包含這些信息的,因為我們這里是私人CA

第三段:[cadefault]和[policycomatch]均屬于第三段,這段內(nèi)容用于處理證書簽名請求(也就是CSR),可以看到,這段中定義了有效期,具體加密算法,證書命令及路徑等信息,后面的[policyco_match]用于設(shè)置策略(這里表示不太懂)

第四段:[req]和[ca_ext],這段定義CSR的參數(shù),下方的[ca-ext]信息在整個CA創(chuàng)建過程都將會被引用,所有的下屬CA都將會被這些配置所約束

第五段:[subcaext]和[crl_info]和[issuerinfo]和[nameconstraints],這段配置是關(guān)于OSCP的配置的,這里就不細(xì)說了。

第六段:[ocsp_ext],OCSP的擴(kuò)展,使用到OCSP的時候就會派上用場

4.1、創(chuàng)建根認(rèn)證中心-ROOT CA

好,好戲終于開始了,創(chuàng)建一個全新的ROOT CA的過程能夠被劃分為以下幾個步驟:

1、配置并創(chuàng)建目錄結(jié)構(gòu)

2、初始化密鑰文件,并生成CSR

3、生成證書

  • 4.1.1、根CA目錄結(jié)構(gòu)創(chuàng)建:Root CA Directory Structure

suse11-weblogic:/opt/openssl # mkdir root-ca
suse11-weblogic:/opt/openssl # cd root-ca
suse11-weblogic:/opt/openssl/root-ca # mkdir certs db private
suse11-weblogic:/opt/openssl/root-ca # chmod 700 private/
suse11-weblogic:/opt/openssl/root-ca # touch db/index
suse11-weblogic:/opt/openssl/root-ca # openssl rand -hex 16 > db/serial
suse11-weblogic:/opt/openssl/root-ca # echo 1001 > db/crlnumber
suse11-weblogic:/opt/openssl/root-ca # vim root-ca.conf【輸入上面的文件內(nèi)容,保存退出】

注釋:
1、certs目錄用于存放證書
2、db目錄用途相當(dāng)于證書數(shù)據(jù)庫,記錄證書和CRL的編號
3、private目錄用于存放密鑰

  • 4.1.2、生成密鑰文件及CSR

根CA的創(chuàng)建主要分為兩步,第一步是生成密鑰和CSR(申請相關(guān)信息從之前的root-ca.conf配置文件中讀取),第二步是創(chuàng)建自簽名證書

1)生成生成密鑰和CSR

suse11-weblogic:/opt/openssl/root-ca # openssl req -new -config root-ca.conf -out root-ca.csr -keyout private/root-ca.key

Generating a 4096 bit RSA private key
...................................................................................++
............................................................++
writing new private key to 'private/root-ca.key'
Enter PEM pass phrase:   【這里需要輸入要給私鑰設(shè)置的密碼】
Verifying - Enter PEM pass phrase:【再次輸入密碼】

注釋:申請信息是讀取的root-ca.conf,因此你可以看到rsa使用4096位【文件中的[req]段配置】
  • 4.1.3、生成自簽名證書

1)創(chuàng)建自簽名證書

suse11-weblogic:/opt/openssl/root-ca # openssl ca -selfsign -config root-ca.conf -in root-ca.csr -out root-ca.crt -extensions ca_ext 

Using configuration from root-ca.conf
Enter pass phrase for ./private/root-ca.key:
Can't open ./db/index.attr for reading, No such file or directory
140544382932720:error:02001002:system library:fopen:No such file or directory:crypto/bio/bss_file.c:74:fopen('./db/index.attr','r')
140544382932720:error:2006D080:BIO routines:BIO_new_file:no such file:crypto/bio/bss_file.c:81:
Check that the request matches the signature
Signature ok
Certificate Details:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
44:56:53:54:11:68:f3:75:fe:a3:6b:60:cf:be:cb:71
Issuer:
countryName   = CN
organizationName  = Example
commonName= Root CA
Validity
Not Before: May 24 05:40:03 2017 GMT
Not After : May 22 05:40:03 2027 GMT
Subject:
countryName   = CN
organizationName  = Example
commonName= Root CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:bb:96:c9:6d:69:fa:b4:65:7c:7b:a1:07:51:ef:
9d:f5:53:49:4a:64:f8:60:f7:3d:cf:6d:d4:4e:b6:
...省略大約40行...

Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints: critical
CA:TRUE
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Subject Key Identifier:
F4:3C:60:6D:C2:B2:77:57:E0:2D:0C:09:DE:31:C9:A8:2F:1E:AA:9E

Certificate is to be certified until May 22 05:40:03 2027 GMT (3650 days)
Sign the certificate? [y/n]:y 【這里需要手動輸入y】


1 out of 1 certificate requests certified, commit? [y/n]y 【這里需要手動輸入y】
Write out database with 1 new entries
Data Base Updated

注釋:-extensions參數(shù)讀取的是配置文件的[ca_ext]的內(nèi)容

證書的相關(guān)內(nèi)容會存放在./db/index文件中,一個證書會生成一行內(nèi)容

suse11-weblogic:/opt/openssl/root-ca/db # cat index
V   270522054003Z       445653541168F375FEA36B60CFBECB71    unknown /C=CN/O=Example/CN=Root CA

注釋:六個字段的解釋如下:

1、Status flag (V for valid, R for revoked, E for expired)

2、Expiration date (in YYMMDDHHMMSSZ format)

3、 Revocation date or empty if not revoked

4、Serial number (hexadecimal)

5、File location or unknown if not known

6、Distinguished name

2)為新生成的CA生成CRL列表文件

suse11-weblogic:/opt/openssl/root-ca # openssl ca -gencrl -config root-ca.conf -out root-ca.crl

Using configuration from root-ca.conf
Enter pass phrase for ./private/root-ca.key:【輸入密鑰密碼】

3)補(bǔ)充:撤銷已生成的證書,使用-revoke命令

suse11-weblogic:/opt/openssl/root-ca # cd certs/
suse11-weblogic:/opt/openssl/root-ca/certs # ls
445653541168F375FEA36B60CFBECB71.pem
suse11-weblogic:/opt/openssl/root-ca/certs # cp 445653541168F375FEA36B60CFBECB71.pem  1002.pem
suse11-weblogic:/opt/openssl/root-ca # openssl ca -config root-ca.conf -revoke certs/1002.pem -crl_reason keyCompromise

Using configuration from root-ca.conf
Enter pass phrase for ./private/root-ca.key:
Revoking Certificate 445653541168F375FEA36B60CFBECB71.
Data Base Updated

suse11-weblogic:/opt/openssl/root-ca # cat db/index
R   270522054003Z   170524072152Z,keyCompromise 445653541168F375FEA36B60CFBECB71    unknown /C=CN/O=Example/CN=Root CA注釋:可以看出我把原有的pem證書文件復(fù)制出來并且命令為1002,然后對1002.pem文件做撤銷操作,實際上撤銷的是我這個證書,也就是說撤銷主要是看文件里面的內(nèi)容(主要看證書文件的序列號,這個序列號在./db/index文件中有對應(yīng)關(guān)系)

4)為證書創(chuàng)建OCSP簽名

OCSP是實時證書在線驗證協(xié)議,是對CRL機(jī)制的彌補(bǔ),通過OCSP,瀏覽器可以實時的向CA機(jī)構(gòu)驗證證書

因為OCSP證書不包含撤銷信息,也就是說OCSP證書不能夠被撤銷,因此我們建議將OCSP的失效時間設(shè)置的短一點,30天是個比較穩(wěn)妥的時間值

1、生成OCSP的CSR

suse11-weblogic:/opt/openssl/root-ca # openssl req -new -newkey rsa:2048 -subj "/C=CN/O=Example/CN=OCSP Root Responder" -keyout private/root-ocsp.key -out root-ocsp.csr

Generating a 2048 bit RSA private key
..+++
.................................................................................................+++
writing new private key to 'private/root-ocsp.key'
Enter PEM pass phrase:【輸入密鑰密碼】
Verifying - Enter PEM pass phrase: 【確認(rèn)密碼】
-----
注釋:這是屬于非CA證書,因此我們不使用root CA的配置文件

2、CA簽名,生成OCSP的證書

suse11-weblogic:/opt/openssl/root-ca # openssl ca -config root-ca.conf -in root-ocsp.csr -out root-ocsp.crt -extensions ocsp_ext -days 30

Using configuration from root-ca.conf
Enter pass phrase for ./private/root-ca.key:
Check that the request matches the signature
Signature ok
Certificate Details:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
44:56:53:54:11:68:f3:75:fe:a3:6b:60:cf:be:cb:72
Issuer:
countryName   = CN
organizationName  = Example
commonName= Root CA
Validity
Not Before: May 24 07:56:24 2017 GMT
Not After : Jun 23 07:56:24 2017 GMT
Subject:
countryName   = CN
organizationName  = Example
commonName= OCSP Root Responder
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (2048 bit)
Modulus:
00:c2:a9:04:12:56:d2:69:20:4c:28:99:8d:26:89:
e7:e1:f6:53:89:1d:af:82:06:14:f8:e6:ff:71:56:
...省略多行...
de:89
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Authority Key Identifier:
keyid:F4:3C:60:6D:C2:B2:77:57:E0:2D:0C:09:DE:31:C9:A8:2F:1E:AA:9E

X509v3 Basic Constraints: critical
CA:FALSE
X509v3 Extended Key Usage:
OCSP Signing
X509v3 Key Usage: critical
Digital Signature
X509v3 Subject Key Identifier:
03:9E:B5:7E:5F:5C:D8:3A:EF:80:83:87:42:F0:11:CF:56:5E:D9:5C

Certificate is to be certified until Jun 23 07:56:24 2017 GMT (30 days)
Sign the certificate? [y/n]:y


1 out of 1 certificate requests certified, commit? [y/n]y
Write out database with 1 new entries
Data Base Updated

3、生成OCSP響應(yīng)器

現(xiàn)在已經(jīng)擁有了啟動OCSP響應(yīng)器的所有必要條件

suse11-weblogic:/opt/openssl/root-ca # openssl ocsp -port 9080 -index db/index -rsigner root-ocsp.crt -rkey private/root-ocsp.key -CA root-ca.crt -text

Enter pass phrase for private/root-ocsp.key: 【輸入密鑰密碼】
Waiting for OCSP client connections...

注釋:可以看到已經(jīng)啟動了監(jiān)聽程序來監(jiān)聽客戶端請求

再復(fù)制一個終端連接,在另一個窗口執(zhí)行以下命令,或者將上面的命令調(diào)到后臺,建議開2個終端,因為上面會有輸出顯示

suse11-weblogic:/opt/openssl/root-ca # openssl ocsp -issuer root-ca.crt -CAfile root-ca.crt -cert root-ocsp.crt -url http://127.0.0.1:9080
Response verify OK
root-ocsp.crt: good
   This Update: May 24 08:05:34 2017 GMT

注釋:使用該命令進(jìn)行證書有效性查看,最后面的URL指的是OCSP響應(yīng)器的地址,在這里檢測root-ca.crt證書的狀態(tài),最后的時間指的是證書的生成時間,verify OK意味著這張證書沒有被revoke撤銷

4.2、創(chuàng)建根認(rèn)證中心ROOT CA下屬CA-Creating a Subordinate CA

創(chuàng)建下屬CA對的過程很大程度上反映了根CA的創(chuàng)建過程,也是需要CRL和OCSP等的創(chuàng)建

  • Subordinate CA Configuration-創(chuàng)建sub-ca.conf配置文件

配置文件根據(jù)root-ca.conf變化而來,以下是有變化的部分,其他都保持默認(rèn)即可

[default]
name = sub-ca
ocsp_url = http://ocsp.$name.$domain_suffix:9081

[ca_dn]
countryName = "CN"
organizationName = "Example"
commonName = "Sub CA"

[ca_default]
default_days = 365
default_crl_days = 30
copy_extensions = copy

[server_ext]
authorityInfoAccess = @issuer_info
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
crlDistributionPoints = @crl_info
extendedKeyUsage = clientAuth,serverAuth
keyUsage = critical,digitalSignature,keyEncipherment
subjectKeyIdentifier = hash

[client_ext]
authorityInfoAccess = @issuer_info
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
crlDistributionPoints = @crl_info
extendedKeyUsage = clientAuth
keyUsage = critical,digitalSignature
subjectKeyIdentifier = hash

注釋:

1、在這里將OCSP的端口定義為9081與根CA的9080不同,有效期設(shè)置為365天,CRL的更新時間為30天,第三小段中的copy_extensions設(shè)置為copy,也就意味著來自于CSR的擴(kuò)展信息(來自于root-ca.conf)并且是下屬CA沒有記錄的信息將會被記錄到證書當(dāng)中,也就是說你允許其他人對證書中的內(nèi)容進(jìn)行有限的直接控制,這事一項危險的舉動,但在小型環(huán)境中可能反而會有幫助。

2、在這個配置文件中,我們新增了個2個小段,[serverext]和[clientext],這2小段的不同處在KeyUsage和extendedKeyUsage,注意到我們設(shè)置了基本約束basicConstraints,但是我們將它設(shè)置為flas,這樣做的原因是

3、本來不想摘出來的,想想為了以后方便,還是把這個文件內(nèi)容粘貼出來吧

suse11-weblogic:/opt/openssl/sub-ca # cat sub-ca.conf
[default]
name = sub-ca
domain_suffix = example.com
aia_url = http://$name.$domain_suffix/$name.crt
crl_url = http://$name.$domain_suffix/$name.crl
ocsp_url = http://ocsp.$name.$domain_suffix:9081
default_ca = ca_default
name_opt = utf8,esc_ctrl,multiline,lname,align

[ca_dn]
countryName = "CN"
organizationName = "Example"
commonName = "Sub CA

[ca_default]
home = .
database = $home/db/index
serial = $home/db/serial
crlnumber = $home/db/crlnumber
certificate = $home/$name.crt
private_key = $home/private/$name.key
RANDFILE = $home/private/random
new_certs_dir = $home/certs
unique_subject = no
copy_extensions = copy
default_days = 365
default_crl_days = 30
default_md = sha256
policy = policy_c_o_match

[policy_c_o_match]
countryName = match
stateOrProvinceName = optional
organizationName = match
organizationalUnitName = optional
commonName = supplied
emailAddress = optional

[req]
default_bits = 4096
encrypt_key = yes
default_md = sha256
utf8 = yes
string_mask = utf8only
prompt = no
distinguished_name = ca_dn
req_extensions = ca_ext

[ca_ext]
basicConstraints = critical,CA:true
keyUsage = critical,keyCertSign,cRLSign
subjectKeyIdentifier = hash

[sub_ca_ext]
authorityInfoAccess = @issuer_info
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:true,pathlen:0
crlDistributionPoints = @crl_info
extendedKeyUsage = clientAuth,serverAuth
keyUsage = critical,keyCertSign,cRLSign
nameConstraints = @name_constraints
subjectKeyIdentifier = hash

[crl_info]
URI.0 = $crl_url

[issuer_info]
caIssuers;URI.0 = $aia_url
OCSP;URI.0 = $ocsp_url

[name_constraints]
permitted;DNS.0=example.com
permitted;DNS.1=example.org
excluded;IP.0=0.0.0.0/0.0.0.0
excluded;IP.1=0:0:0:0:0:0:0:0/0:0:0:0:0:0:0:0

[ocsp_ext]
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
extendedKeyUsage = OCSPSigning
keyUsage = critical,digitalSignature
subjectKeyIdentifier = hash

[server_ext]
authorityInfoAccess = @issuer_info
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
crlDistributionPoints = @crl_info
extendedKeyUsage = clientAuth,serverAuth
keyUsage = critical,digitalSignature,keyEncipherment
subjectKeyIdentifier = hash

[client_ext]
authorityInfoAccess = @issuer_info
authorityKeyIdentifier = keyid:always
basicConstraints = critical,CA:false
crlDistributionPoints = @crl_info
extendedKeyUsage = clientAuth
keyUsage = critical,digitalSignature
subjectKeyIdentifier = hash

好,好戲終于開始了,創(chuàng)建一個全新的ROOT CA的下屬CA的過程也能夠被劃分為以下幾個步驟:

1、配置并創(chuàng)建目錄結(jié)構(gòu)

2、初始化密鑰文件和CSR

3、生成證書

  • 4.2.1、創(chuàng)建下屬CA的目錄結(jié)構(gòu)

suse11-weblogic:/opt/openssl # mkdir sub-ca
suse11-weblogic:/opt/openssl # cd sub-ca
suse11-weblogic:/opt/openssl/sub-ca # mkdir certs db private
suse11-weblogic:/opt/openssl/sub-ca # chmod 700 private/
suse11-weblogic:/opt/openssl/sub-ca # touch db/index
suse11-weblogic:/opt/openssl/sub-ca # openssl rand -hex 16 > db/serial
suse11-weblogic:/opt/openssl/sub-ca # echo 1001 > db/crlnumber
suse11-weblogic:/opt/openssl/sub-ca # cp ../root-ca/root-ca.conf ./sub-ca.conf
suse11-weblogic:/opt/openssl/sub-ca # vim sub-ca.conf【修改和新增上述需要變化內(nèi)容,保存退出】

注釋:
1、certs目錄用于存放證書
2、db目錄用途相當(dāng)于證書數(shù)據(jù)庫,記錄證書和CRL的編號
3、private目錄用于存放密鑰

  • 4.2.2、生成密鑰和CSR

suse11-weblogic:/opt/openssl/sub-ca # openssl req -new -config sub-ca.conf  -out sub-ca.csr -keyout private/sub-ca.key 
Generating a 4096 bit RSA private key

.........................................................................................................................................................................................................................................................++
.............................................................++
writing new private key to 'private/sub-ca.key'
Enter PEM pass phrase:【這里輸入密鑰密碼】
Verifying - Enter PEM pass phrase:【再次輸入密碼】
-----
suse11-weblogic:/opt/openssl/sub-ca #


  • 4.2.3、ROOT CA為該CSR進(jìn)行簽名生成證書

注釋:在這里是使用之前已經(jīng)生成的ROOT CA來為這個下屬CA進(jìn)行簽名,要明白這個關(guān)系

suse11-weblogic:/opt/openssl/sub-ca # cd ../root-ca

suse11-weblogic:/opt/openssl/root-ca # openssl ca -config ../root-ca/root-ca.conf -in ../sub-ca/sub-ca.csr -out ../sub-ca/sub-ca.crt -extensions sub_ca_ext

Using configuration from ../root-ca/root-ca.conf
Enter pass phrase for ./private/root-ca.key:
Check that the request matches the signature
Signature ok
Certificate Details:
Certificate:
Data:
Version: 3 (0x2)
Serial Number:
44:56:53:54:11:68:f3:75:fe:a3:6b:60:cf:be:cb:73
Issuer:
countryName   = CN
organizationName  = Example
commonName= Root CA
Validity
Not Before: May 24 08:59:04 2017 GMT
Not After : May 22 08:59:04 2027 GMT
Subject:
countryName   = CN
organizationName  = Example
commonName= Sub CA
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
Public-Key: (4096 bit)
Modulus:
00:dd:3b:99:b1:d8:c7:a7:d3:54:0c:09:62:a2:e4:
2e:ba:45:2e:9c:b3:3a:9e:ff:a5:a7:59:1d:9b:4b:
...省略約40行...
Exponent: 65537 (0x10001)
X509v3 extensions:
Authority Information Access:
CA Issuers - URI:http://root-ca.example.com/root-ca.crt
OCSP - URI:http://ocsp.root-ca.example.com:9080

X509v3 Authority Key Identifier:
keyid:F4:3C:60:6D:C2:B2:77:57:E0:2D:0C:09:DE:31:C9:A8:2F:1E:AA:9E

X509v3 Basic Constraints: critical
CA:TRUE, pathlen:0
X509v3 CRL Distribution Points:

Full Name:
 URI:http://root-ca.example.com/root-ca.crl

X509v3 Extended Key Usage:
TLS Web Client Authentication, TLS Web Server Authentication
X509v3 Key Usage: critical
Certificate Sign, CRL Sign
X509v3 Name Constraints:
Permitted:
 DNS:example.com
 DNS:example.org
Excluded:
 IP:0.0.0.0/0.0.0.0
 IP:0:0:0:0:0:0:0:0/0:0:0:0:0:0:0:0

X509v3 Subject Key Identifier:
C4:1F:0C:07:47:F7:AA:DF:21:75:CD:4B:20:AF:5C:94:13:B0:E9:70
Certificate is to be certified until May 22 08:59:04 2027 GMT (3650 days)
Sign the certificate? [y/n]:y【需要確認(rèn)】


1 out of 1 certificate requests certified, commit? [y/n]y【需要確認(rèn)】
Write out database with 1 new entries
Data Base Updated

注釋:
1、這里ROOT CA為下屬CA生成了證書,正式宣告了,這個下屬CA可以獨立存在并為其他公司機(jī)構(gòu)頒發(fā)證書。目前證書鏈    的層數(shù)為2層。
2、這里的OCSP相應(yīng)器還沒有啟動,啟動命令參考上面的root ca。

4.3、下級CA為公司或個人頒發(fā)證書

實際證書頒發(fā)情況,我們不是使用ROOT CA為申請的公司或個人來頒發(fā)證書,而是二層CA或三層CA等下屬CA來頒發(fā)證書,至于為什么,主要是安全性考慮,相信各位都能明白

  • 4.3.1、為公司服務(wù)器頒發(fā)證書

suse11-weblogic:/opt/openssl/sub-ca # openssl ca -config sub-ca.conf -in server.csr  -out server.crt  -extensions server_ext

注釋:證書生成的命令格式相信大家已經(jīng)非常熟悉了,針對服務(wù)器端證書,使用[server_ext]段擴(kuò)展進(jìn)行限制
  • 4.3.2、為個人客戶端頒發(fā)證書(一般指的是瀏覽器)

suse11-weblogic:/opt/openssl/sub-ca # openssl ca  -config sub-ca.conf  -in client.csr  -out client.crt  -extensions client_ext

注釋:證書生成的命令格式相信大家已經(jīng)非常熟悉了,針對客戶端證書,使用[client_ext]段擴(kuò)展進(jìn)行限制

5、編譯安裝最新版本HTTPD

5.1、下載所需依賴軟件包

依賴關(guān)系:

1、apr-1.5.2.tar.gz;下載鏈接:http://apr.apache.org/download.cgi

2、apr-util-1.5.4.tar.gz;下載鏈接:http://apr.apache.org/download.cgi

3、pcre2-10.23.tar.gz:下載鏈接:ftp://ftp.csx.cam.ac.uk/pub/software/programming/pcre/

5.2、下載httpd軟件包,安裝Web服務(wù)

下載版本:httpd-2.4.25.tar.gz

下載鏈接:http://httpd.apache.org/download.cgi#apache24

在這里,我們根據(jù)官網(wǎng)提示,將apr,apr-utils等依賴軟件包都安裝到httpd解壓后的目錄下

NTP-slave:~/soft # tar -zxvf httpd-2.4.25.tar.gz
NTP-slave:~/soft # tar -zxvf 1-apr-1.5.2.tar.gz -C /root/soft/httpd-2.4.25/srclib/
NTP-slave:~/soft # cd /root/soft/httpd-2.4.25/srclib/apr-1.5.2
NTP-slave:~/soft/httpd-2.4.25/srclib/apr-1.5.2 # ./configure --prefix=/usr/local/apr
NTP-slave:~/soft/httpd-2.4.25/srclib/apr-1.5.2 # make
NTP-slave:~/soft/httpd-2.4.25/srclib/apr-1.5.2 # make install

NTP-slave:~/soft # tar -zxvf 2-apr-util-1.5.4.tar.gz -C /root/soft/httpd-2.4.25/srclib/
NTP-slave:~/soft # cd /root/soft/httpd-2.4.25/srclib/apr-util-1.5.4
NTP-slave:~/soft/httpd-2.4.25/srclib/apr-util-1.5.4 # ./configure --prefix=/usr/local/apr-util --with-apr=/usr/local/apr/bin/apr-1-config
NTP-slave:~/soft/httpd-2.4.25/srclib/apr-util-1.5.4 # make
NTP-slave:~/soft/httpd-2.4.25/srclib/apr-util-1.5.4 # make install

NTP-slave:~/soft # tar -zxvf 3--pcre2-10.23.tar.gz
NTP-slave:~/soft # cd pcre2-10.23/
NTP-slave:~/soft/pcre2-10.23 # ./configure --prefix=/usr/local/pcre
NTP-slave:~/soft/pcre2-10.23 # make
NTP-slave:~/soft/pcre2-10.23 # make install

在編譯httpd的時候添加ssl加密模塊 如果不知道命令應(yīng)該是什么樣子的可以執(zhí)行這條命令進(jìn)行查看:

NTP-slave:~/soft/httpd-2.4.25 # ./configure --help | grep ssl

NTP-slave:~/soft/httpd-2.4.25 # ./configure --prefix=/usr/local/httpd --enable-so --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/bin/pcre2-config

在執(zhí)行這個的時候,出現(xiàn)了一個報錯: checking for OpenSSL version >= 0.9.8a... FAILED 這就很尷尬了,還好我們已經(jīng)裝過一次了,快快的按照之前的方法把新版本裝上,這里就不寫步驟了,這次我們把openssl裝在/usr/local下

NTP-slave:~/soft/httpd-2.4.25 # ./configure --prefix=/usr/local/httpd --enable-so --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre/bin/pcre2-config --with-ssl=/usr/local/openssl
NTP-slave:~/soft/httpd-2.4.25 # make

然后報了下面這個錯

util_pcre.c:49:18: error: pcre.h: No such file or directory

這里是需要安裝pcre-devel,無奈SLSE系統(tǒng)沒有這個軟件包(找了好久),只能采取第二種方法,把pcre降級成pcre-8.40之后,這個問題自然就解決了,其他系統(tǒng)的小伙伴可以直接安裝pcre-devel進(jìn)行解決【好心塞】

裝完之后,我們繼續(xù)

NTP-slave:~/soft/httpd-2.4.25 #./configure --prefix=/usr/local/httpd --enable-so --enable-ssl --with-apr=/usr/local/apr --with-apr-util=/usr/local/apr-util/ --with-pcre=/usr/local/pcre  --with-ssl=/usr/local/openssl
NTP-slave:~/soft/httpd-2.4.25 # make

這里在make的時候TMD又報錯了,簡直是不能忍,這么多問題,報錯如下:

/root/soft/httpd-2.4.25/support/ab.c:2468: undefined reference to `CRYPTO_malloc_init'
/root/soft/httpd-2.4.25/support/ab.c:2398: undefined reference to `SSLv2_client_method'

網(wǎng)上看了看,說是openssl的版本不兼容問題,好吧,2個最新的軟件不兼容,這個可以理解,我們裝低版本看看。裝到這里,發(fā)現(xiàn)各個軟件之間的版本互相兼容真是一個問題,這也是一個商機(jī),pcre最新版本也是出問題,openssl最新版本也是出問題,我在想是不是不可這2個保持不變,把httpd換成低版本? 我們openssl的版

新聞標(biāo)題:實現(xiàn)HTTPS系列第五彈(終章)之【通過OpenSSL實現(xiàn)HTTPS】
文章網(wǎng)址:http://bm7419.com/article46/gihdeg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供標(biāo)簽優(yōu)化、微信小程序、自適應(yīng)網(wǎng)站、品牌網(wǎng)站建設(shè)、營銷型網(wǎng)站建設(shè)關(guān)鍵詞優(yōu)化

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)公司