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

博文說明【前言】:

    本文爲實現HTTPS系列終章,將通過個人口吻從開始到結束,詳細的講解OpenSSL安裝、密鑰生成、CSR生成,證書生成,ROOT CA創建等配置過程以及httpd的安裝及配置。

    如想快速實現配置,可以直接拉到文章末尾,我將配置命令挑出來進行了總結。

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


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

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

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

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

3、第三彈:實現HTTPS系列第三彈之【數字簽名,數字證書,CA認證等概念理解】

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

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

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


參考文獻:

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

2、參考文檔:Ivan Ristic - Bulletproof SSL and TLS 【巨牛逼,聖經,經典,必讀】

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

3、參考文檔:Ivan Ristic - openssl-cookbook【經典必讀】

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



正文:


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

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

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

4、X.509是由國際電信聯盟(ITU-T)制定的數字證書標準,也就是說這是一種證書標準,不是證書格式,類似POSIX對於Linux。

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

環境信息

  • 操作系統信息

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
註釋:請無視我的內核和系統版本,目前維護的生產系統版本從SLES 11 sp0到sp4都有,因此新建了對應虛擬機,一不小心挑了臺最低版本的,不過不影響,這樣反而更具有代表性。

  • 系統自帶的openssl詳細版本信息: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,不支持最新的協議,因此建議安裝最新版的openssl,下方內容將介紹整個配置過程。

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的時候出現報錯:

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

問題原因爲虛擬機時間與實際時間不對,虛擬機的時間是2016年,而該版本是2017年2月16號發佈的,因此係統檢測出時間異常,導致這個報錯異常,將時間重新設置之後,問題解決,可以繼續正常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  
重新設置系統時間,並將系統時間同步到硬件時鐘時間。
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)的相關庫文件放置到相關位置下,因爲openssl命令正確執行需要讀取這些動態鏈接庫

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

2、openssl支持命令及參數

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

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、根據密鑰生成證書籤名請求(CSR),並把它發送給CA

3、CA接受CSR,生成證書

4、獲取下發證書,開始使用

3.1、密鑰生成

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

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

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

關於密鑰的長度,RSA默認的長度(RSA默認使用512 bit)非常不安全,建議修改爲高強度的位數

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

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

查看密鑰命令:

1、查看密鑰的內容:cat fd.key

2、查看密鑰的結構和內容:openssl rsa -text -in fd.key

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

DSA密鑰的生成需要2個步驟:先生成DSA配置參數,然後才能真正生成密鑰,而不是像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、查看密鑰的內容:cat dsa.key

2、查看密鑰的結構和內容:openssl dsa -text -in dsa.key

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

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

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、查看密鑰的內容:cat ec.key

2、查看密鑰的結構和內容:openssl ec -text -in ec.key

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

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

CSR信息中包含:請求者的公鑰信息以及申請信息,這2個信息後續將會包含在CA下發的證書中。

  • 3.2.1、初始全新生成CSR

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

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 []:[email protected]

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

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

  • 3.2.2、根據現有證書中的申請信息再次生成原始CSR

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

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

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

有些時候,我們不方便或者想節約時間,那麼就可以事先將申請信息寫入配置文件,然後加載配置文件生成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

註釋:以上爲文件內容,111111爲密鑰的密碼,ext字段在下文會講到,爲多站點分配證書

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

註釋:親測,確實省事。

3.3、接受CSR,生成證書

在CSR生成之後,你可以發送CSR給當前互聯網上的知名CA結構請求證書(當然,是要收費的啦)或者自己處理這個請求(yes,免費)

  • 發送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 = [email protected]
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 = [email protected]
Getting Private key
Enter pass phrase for fd.key:【這裏輸入密鑰的密碼】

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

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

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、給多主機生成自簽名證書

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

目前有2種實現方式可以爲多主機分配證書,具體使用哪種根據實際情況決定

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

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

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

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

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

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

註釋:以上爲fd.ext文件內容

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 = [email protected]
Getting Private key
Enter pass phrase for fd.key:【這裏輸入密鑰密碼】


註釋:這裏要有密鑰文件,CSR文件存在,可自行結合使用(跳過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 = [email protected]
    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 = [email protected]
    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:
     ...太多,略...

自簽名證書通常只包含這些基本證書數據,而相比之下,CA機構頒發的證書則會有一些額外的字段

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

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


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

這個列表可以用於列出客戶機或服務器用戶不應再信任的所有證書和密鑰,一般是定期發佈(例如每7天更新)

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

  • 3.3.4、證書類型

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

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

這種類型的證書是原生x.509標準證書,沒有做其他處理,使用編碼爲:DER ASN.1

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

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

3)證書類型--PKCS#7

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

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

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

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

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

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

這種複雜的類型可以保護密鑰和證書鏈,它的擴展名一般是.p12和.pfx,這種類型一般用在微軟系列的產品中

  • 3.3.5、證書類型轉換

1)PEM類型轉換成DER

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

2)DER類型轉換成PEM

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

關於其他的不常用的類型轉換,這裏不再寫出,感興趣的小夥伴可以自己看書,書中都寫的很清楚。


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

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

建立並運行私人CA面臨的最大挑戰不是如何設置,而是如何確保基礎設施的安全,也就是保證這臺CA服務器的安全,例如,root key必須以離線的方式保存,因爲它是所有的安全得以保證的根源。另一方面,CRL和OCSP等這些過期證書列表必須定期更新(crl上面有說到,OCSP是實時證書在線驗證協議,是對CRL機制的彌補,通過OCSP,瀏覽器可以實時的向CA機構驗證證書)

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

  • Root CA Configuration-創建root-ca.conf配置文件

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

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

[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]中包含國家和組織等字段,而知名的收費CA是不會包含這些信息的,因爲我們這裏是私人CA

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

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

第五段:[subcaext]和[crl_info]和[issuerinfo]和[nameconstraints],這段配置是關於OSCP的配置的,這裏就不細說了。

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

4.1、創建根認證中心-ROOT CA

好,好戲終於開始了,創建一個全新的ROOT CA的過程能夠被劃分爲以下幾個步驟:

1、配置並創建目錄結構

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

3、生成證書

  • 4.1.1、根CA目錄結構創建: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【輸入上面的文件內容,保存退出】

註釋:
1、certs目錄用於存放證書
2、db目錄用途相當於證書數據庫,記錄證書和CRL的編號
3、private目錄用於存放密鑰


  • 4.1.2、生成密鑰文件及CSR

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

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:   【這裏需要輸入要給私鑰設置的密碼】
Verifying - Enter PEM pass phrase:【再次輸入密碼】

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

1)創建自簽名證書

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參數讀取的是配置文件的[ca_ext]的內容

證書的相關內容會存放在./db/index文件中,一個證書會生成一行內容

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)補充:撤銷已生成的證書,使用-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證書文件複製出來並且命令爲1002,然後對1002.pem文件做撤銷操作,實際上撤銷的是我這個證書,也就是說撤銷主要是看文件裏面的內容(主要看證書文件的序列號,這個序列號在./db/index文件中有對應關係)

4)爲證書創建OCSP簽名

OCSP是實時證書在線驗證協議,是對CRL機制的彌補,通過OCSP,瀏覽器可以實時的向CA機構驗證證書

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

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: 【確認密碼】
-----
註釋:這是屬於非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響應器

現在已經擁有了啓動OCSP響應器的所有必要條件

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...

註釋:可以看到已經啓動了監聽程序來監聽客戶端請求

再複製一個終端連接,在另一個窗口執行以下命令,或者將上面的命令調到後臺,建議開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

註釋:使用該命令進行證書有效性查看,最後面的URL指的是OCSP響應器的地址,在這裏檢測root-ca.crt證書的狀態,最後的時間指的是證書的生成時間,verify OK意味着這張證書沒有被revoke撤銷

4.2、創建根認證中心ROOT CA下屬CA-Creating a Subordinate CA

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

  • Subordinate CA Configuration-創建sub-ca.conf配置文件

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

[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不同,有效期設置爲365天,CRL的更新時間爲30天,第三小段中的copy_extensions設置爲copy,也就意味着來自於CSR的擴展信息(來自於root-ca.conf)並且是下屬CA沒有記錄的信息將會被記錄到證書當中,也就是說你允許其他人對證書中的內容進行有限的直接控制,這事一項危險的舉動,但在小型環境中可能反而會有幫助。

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

3、本來不想摘出來的,想想爲了以後方便,還是把這個文件內容粘貼出來吧

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

好,好戲終於開始了,創建一個全新的ROOT CA的下屬CA的過程也能夠被劃分爲以下幾個步驟:

1、配置並創建目錄結構

2、初始化密鑰文件和CSR

3、生成證書

  • 4.2.1、創建下屬CA的目錄結構


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【修改和新增上述需要變化內容,保存退出】

註釋:
1、certs目錄用於存放證書
2、db目錄用途相當於證書數據庫,記錄證書和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進行簽名生成證書

註釋:在這裏是使用之前已經生成的ROOT CA來爲這個下屬CA進行簽名,要明白這個關係

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【需要確認】


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

註釋:
1、這裏ROOT CA爲下屬CA生成了證書,正式宣告了,這個下屬CA可以獨立存在併爲其他公司機構頒發證書。目前證書鏈    的層數爲2層。
2、這裏的OCSP相應器還沒有啓動,啓動命令參考上面的root ca。

4.3、下級CA爲公司或個人頒發證書

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

  • 4.3.1、爲公司服務器頒發證書

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

註釋:證書生成的命令格式相信大家已經非常熟悉了,針對服務器端證書,使用[server_ext]段擴展進行限制
  • 4.3.2、爲個人客戶端頒發證書(一般指的是瀏覽器)

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

註釋:證書生成的命令格式相信大家已經非常熟悉了,針對客戶端證書,使用[client_ext]段擴展進行限制


5、編譯安裝最新版本HTTPD

5.1、下載所需依賴軟件包

依賴關係:

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服務

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

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

在這裏,我們根據官網提示,將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加密模塊 如果不知道命令應該是什麼樣子的可以執行這條命令進行查看:

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

在執行這個的時候,出現了一個報錯: checking for OpenSSL version >= 0.9.8a... FAILED 這就很尷尬了,還好我們已經裝過一次了,快快的按照之前的方法把新版本裝上,這裏就不寫步驟了,這次我們把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系統沒有這個軟件包(找了好久),只能採取第二種方法,把pcre降級成pcre-8.40之後,這個問題自然就解決了,其他系統的小夥伴可以直接安裝pcre-devel進行解決【好心塞】

裝完之後,我們繼續

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'

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

注意:apache 2.4.x 系列和 openssl 1.1.x系列不兼容

以下是我嘗試的結果【全部失敗】:

NTP-slave:/usr/local/openssl/lib # openssl version OpenSSL 1.0.2l 25 May 2017

NTP-slave:~/soft/httpd-2.4.25 # openssl version OpenSSL 1.0.2h 3 May 2016

NTP-slave:/usr/local/openssl/lib # openssl version OpenSSL 1.0.2 22 Jan 2015

NTP-slave:/usr/local/openssl/lib # openssl version OpenSSL 1.0.1 14 Mar 2012

後來我才反應過來,這些版本應該是可以的,只不過我自從出問題之後都沒有執行make clean清除下緩存,導致後續還是有這個問題,在make clean 刪除之前make過程中生成的緩存文件之後,使用降級版本openssl-1.0.2j.tar.gz之後,這個問題應該是解決了,出現瞭如下報錯:

/usr/lib64/gcc/x86_64-suse-linux/4.3/../../../../x86_64-suse-linux/bin/ld: /usr/local/openssl/lib/libssl.a(s3_srvr.o): relocation R_X86_64_32 against `.rodata' can not be used when making a shared object; recompile with -fPIC

可以看出,這應該又是openssl的問題,在編譯的時候少了-fPIC編譯,說來慚愧,一開始我還以爲是httpd的問題,把httpd編譯來編譯去,折騰了好幾天還是沒解決,後來才醒悟過來還是openssl的問題 我們把openssl重新編譯安裝,使用下面的參數-fPIC

NTP-slave:~/soft/openssl-1.0.2j # ./config -fPIC --prefix=/usr/local/openssl --openssldir=/usr/local/openssl enable-ec_nistp_64_gcc_128
NTP-slave:~/soft/openssl-1.0.2j # make
NTP-slave:~/soft/openssl-1.0.2j # make install

完美解決!!!

關於這個-fPIC參數,它作用於編譯階段,告訴編譯器產生與位置無關代碼(Position-Independent Code),則產生的代碼中,沒有絕對地址,全部使用相對地址,故而代碼可以被加載器加載到內存的任意位置,都可以正確的執行。這正是共享庫所要求的,共享庫被加載時,在內存的位置不是固定的。關於這個參數,我表示還是沒理解,先記錄,後續再有機會再仔細研究下。

重新編譯安裝openssl之後,我們再近進入httpd的解壓目錄,重新編譯執行安裝,一路順暢,沒有報錯。

縷縷順序:

1、openssl需要重新安裝,注意版本要求和編譯參數

2、apr,apr-util,pcre等按照上述的正確要求即可

3、執行httpd正確編譯安裝



5.3、對httpd使用加密模塊實現https


1、在httpd目錄下創建存放祕鑰證書的目錄,並在裏面生成祕鑰及證書

NTP-slave:/usr/local/httpd # mkdir openssl
NTP-slave:/usr/local/httpd/openssl #openssl genrsa -aes128 -out fd.key 2048
NTP-slave:/usr/local/httpd/openssl #openssl req -new -key fd.key -out fd.csr
NTP-slave:/usr/local/httpd/openssl #openssl x509 -req -days 3650 -in fd.csr -signkey fd.key -out fd.crt

2、編輯配置文件:/usr/local/httpd/conf/extra/httpd-ssl.conf,注意先備份

··

36 Listen 443       #文件的36行定義加密端口,默認爲443

80 SSLProtocol all -SSLv3  #第80行定義了加密協議,支持所有,但是不支持SSLv3,這實際上是表示只支持TLSv1及以上

122 <VirtualHost _default_:443>
123
124 #   General setup for the virtual host
125 DocumentRoot "/usr/local/httpd/htdocs/ssl"
126 ServerName "www.watchmenhttps.com"
127 ServerAdmin "[email protected]"
128 ErrorLog "/usr/local/httpd/logs/error_log"
129 TransferLog "/usr/local/httpd/logs/access_log"
130
131 #   SSL Engine Switch:
132 #   Enable/Disable SSL for this virtual host.
133 SSLEngine on


145 #SSLCertificateFile "/usr/local/httpd/conf/server.crt" #文件的第145行定義證書路徑,我們將它修改爲我麼的證書路徑
146 SSLCertificateFile "/usr/local/httpd/openssl/fd.crt"

156 #SSLCertificateKeyFile "/usr/local/httpd/conf/server.key" #文件的第156行定義祕鑰路徑,我們將它修改爲我們的證書路徑
157 SSLCertificateKeyFile "/usr/local/httpd/openssl/fd.key"

3、編輯配置文件:/usr/local/httpd/conf/httpd.conf,注意先備份

52 Listen 80    #端口默認80,我們保持不變,不做修改

131 LoadModule ssl_module modules/mod_ssl.so  #把131的註釋去掉

192 #ServerName www.example.com:80      #http的訪問域名我們還是要定義下的
193 ServerName www.watchmen.com

493 Include conf/extra/httpd-ssl.conf       #把493行的註釋去掉

4、啓動服務,查看效果 配置好了之後,到了我們的檢驗環境了,學了這麼久要考試了。

NTP-slave:/usr/local/httpd/conf # /usr/local/httpd/bin/apachectl  restart
這個時候出現以下報錯:

AH00526: Syntax error on line 93 of /usr/local/httpd/conf/extra/httpd-ssl.conf:
SSLSessionCache: 'shmcb' session cache not supported (known names: ). Maybe you need to load the appropriate socache module (mod_socache_shmcb?).


解決方法:打開httpd.conf,找到 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so,把前面的註釋去掉。

88 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so


NTP-slave:/usr/local/httpd/conf # /usr/local/httpd/bin/apachectl  restart
httpd not running, trying to start
Apache/2.4.25 mod_ssl (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Private key www.watchmenhttps.com:443:0 (/usr/local/httpd/openssl/fd.key)
Enter pass phrase:

OK: Pass Phrase Dialog successful.

我們進行測試(注意:需要事先在本地的hosts文件添加IP到域名的映射關係):

1、首先是http

BDSCRqO.jpg

2、然後是https

pglnRAI.jpg

tMNBqEj.jpg

6、快速配置

本章節將從上文內提取從安裝OpenSSL到證書生成的核心命令以及HTTP相關配置,便於快速執行,在快速配置中,爲了簡潔,寫了直接生成證書和使用ROOT CA來做證書,這裏就不使用下屬CA了,小夥伴們可以模擬真實環境使用下屬CA來下發證書。 

1、OpenSSL安裝

安裝版本:openssl-1.0.2j.tar.gz,下載鏈接:http://www.openssl.org/source

請先確認服務器時間,以免安裝失敗(感覺應該沒多少人和我一樣,注意如果是httpd-2.4.x系列,請降級openssl版本,在這裏我以openssl-1.0.2j版本爲例)

NTP-slave:~/soft # tar -zxvf openssl-1.0.2j.tar.gz
NTP-slave:~/soft # cd openssl-1.0.2j/
NTP-slave:~/soft/openssl-1.0.2j # ./config -fPIC --prefix=/usr/local/openssl --openssldir=/usr/local/openssl enable-ec_nistp_64_gcc_128
NTP-slave:~/soft/openssl-1.0.2j # make
NTP-slave:~/soft/openssl-1.0.2j # make install 
NTP-slave:~/soft/openssl-1.0.2j # ln -s /usr/local/openssl/lib/libcrypto.a /usr/lib64/libcrypto.a
NTP-slave:~/soft/openssl-1.0.2j # ln -s /usr/local/openssl/lib/libssl.a /usr/lib64/libssl.a
suse11-weblogic:~ # vim /etc/profile 
export PATH=/opt/openssl/bin:$PATH   在文件末尾添加這一行然後保存退出
suse11-weblogic:~ # source /etc/profile

2、生成密鑰和CSR

suse11-weblogic:~/wxh # openssl genrsa -aes128 -out fd.key 2048
suse11-weblogic:~/wxh # 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) []:www.watchmen.com
【註釋:這裏一定要注意,填寫的FQDN信息就是客戶端實際訪問的域名,所以這裏務必注意,例如百度的話應該是www.baidu.com,爲了測試就先不給51打廣告了】
Email Address []:[email protected]

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

額外一步:將公鑰從祕鑰中抽離出來,可選
suse11-weblogic:~/wxh # openssl  rsa -in fd.key -pubout -out fd-public.key

3、證書生成

  • 1、不創建ROOT CA,直接生成證書(爲快速配置的話,建議使用這種方式)

suse11-weblogic:~/wxh # 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 = www.watchmen.com, emailAddress = [email protected]
Getting Private key
Enter pass phrase for fd.key:【這裏輸入密鑰的密碼】

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


  • 2、創建CA,使用CA簽名下發證書

  • 執行順序:
    1、創建根CA目錄結構並創建root-ca.conf
    2、生成祕鑰,CSR,然後給自己簽名下發證書,使自己成爲CA。
    3、爲上述CSR進行簽名下發證書。

1)創建root-ca.conf

suse11-weblogic:~/wxh # mkdir sub-ca
suse11-weblogic:~/wxh # cd sub-ca
suse11-weblogic:~/wxh/root-ca # mkdir certs db private
suse11-weblogic:~/wxh/root-ca # chmod 700 private/
suse11-weblogic:~/wxh/root-ca # touch db/index
suse11-weblogic:~/wxh/root-ca # openssl rand -hex 16 > db/serial
suse11-weblogic:~/wxh/root-ca # echo 1001 > db/crlnumber
suse11-weblogic:~/wxh/root-ca # vim sub-ca.conf【輸入以下內容,保存退出】

[default]
name = root-ca
domain_suffix = picc.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 = "PICC"
commonName = "Root CA

[ca_default]
home = /root/wxh/root-ca
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=picc.com
permitted;DNS.1=picc.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

2)生成祕鑰、CSR併爲自己簽名下發證書

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

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

3)爲上述CSR請求籤名下發證書

suse11-weblogic:~/wxh/root-ca # openssl ca -config root-ca.conf -in ../fd.csr -out ../fd.crt 


4、安裝httpd實現https

  • 1、使用系統自帶的Web服務器進行配置

NTP-slave:~ # zypper in apache*
NTP-slave:~ # cd /etc/apache2/
NTP-slave:/etc/apache2 # cd vhosts.d/
NTP-slave:/etc/apache2/vhosts.d # cp vhost-ssl.template  watchmenvhost.conf
NTP-slave:/etc/apache2/vhosts.d # vim watchmenvhost.conf
修改文件中相關重要內容爲以下【只截取了一部分重要內容】:


   <VirtualHost _default_:443>
   #  General setup for the virtual host
   DocumentRoot "/srv/www/htdocs"
   #ServerName www.example.com:443
   ServerName www.watchmen2.com:443
   #ServerAdmin [email protected]
   ErrorLog /var/log/apache2/error_log
   TransferLog /var/log/apache2/access_log

   #   SSL Engine Switch:
   #   Enable/Disable SSL for this virtual host.
   SSLEngine on

   # 4 possible values: All, SSLv2, SSLv3, TLSv1. Allow TLS only:
   SSLProtocol all -SSLv2 -SSLv3
   SSLCertificateFile  /etc/apache2/openssl/fd2.crt
   SSLCertificateKeyFile /etc/apache2/openssl/fd.key

修改SSL啓動條件

NTP-slave:/etc/apache2/vhosts.d # vim /etc/sysconfig/apache2

133 #APACHE_SERVER_FLAGS=""
134 APACHE_SERVER_FLAGS=" -D SSL"

213 #APACHE_START_TIMEOUT="2"
214 APACHE_START_TIMEOUT="10"

啓動服務

NTP-slave:/etc/apache2/vhosts.d # /etc/init.d/apache2 restart 
Syntax OK
Shutting down httpd2 (waiting for all children to terminate)done
Starting httpd2 (prefork) Apache/2.2.12 mod_ssl/2.2.12 (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Server www.watchmen2.com:443 (RSA)
Enter pass phrase:

OK: Pass Phrase Dialog successful.
done
NTP-slave:/etc/apache2/vhosts.d #

好,我們分別訪問頁面: https://www.watchmen.com/ https://www.watchmen2.com/

發現一個很有趣的現象,我們在訪問第一個網址是正常的,而我們在訪問下一個網址的時候瀏覽器會給我們提示:“您的連接不安全”,如下圖所示:

 1)

 fBMz4YF.jpg 

2) Rb9EMbI.jpg

這是因爲之前獲取證書的時候請求的網址是:www.watchmen.com,而不是www.watchmen2.com

  • 2、源碼安裝httpd進行配置

1)下載所需的依賴軟件包 依賴關係:

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/

2)下載httpd軟件包,安裝Web服務

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

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

注意:在這裏,我們需要將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--pcre-8.40.tar.gz
NTP-slave:~/soft # cd pcre2-10.23/
NTP-slave:~/soft/pcre-8.40 # ./configure --prefix=/usr/local/pcre
NTP-slave:~/soft/pcre-8.40 # make
NTP-slave:~/soft/pcre-8.40 # make install

在編譯httpd的時候添加ssl加密模塊 如果不知道命令應該是什麼樣子的可以執行這條命令進行查看:

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  --with-ssl=/usr/local/openssl
NTP-slave:~/soft/httpd-2.4.25 # make
NTP-slave:~/soft/httpd-2.4.25 # make install
  • 3、對httpd使用加密模塊實現https

1、在httpd目錄下創建存放祕鑰證書的目錄,並在裏面生成祕鑰及證書

NTP-slave:/usr/local/httpd # mkdir openssl
NTP-slave:/usr/local/httpd/openssl #openssl genrsa -aes128 -out fd.key 2048
NTP-slave:/usr/local/httpd/openssl #openssl req -new -key fd.key -out fd.csr
NTP-slave:/usr/local/httpd/openssl #openssl x509 -req -days 3650 -in fd.csr -signkey fd.key -out fd.crt

2、編輯配置文件:/usr/local/httpd/conf/extra/httpd-ssl.conf,注意先備份

36 Listen 443       #文件的36行定義加密端口,默認爲443

80 SSLProtocol all -SSLv3  #第80行定義了加密協議,支持所有,但是不支持SSLv3,這實際上是表示只支持TLSv1及以上

122 <VirtualHost _default_:443>
123
124 #   General setup for the virtual host
125 DocumentRoot "/usr/local/httpd/htdocs/ssl"
126 ServerName "www.watchmenhttps.com"
127 ServerAdmin "[email protected]"
128 ErrorLog "/usr/local/httpd/logs/error_log"
129 TransferLog "/usr/local/httpd/logs/access_log"
130
131 #   SSL Engine Switch:
132 #   Enable/Disable SSL for this virtual host.
133 SSLEngine on

145 #SSLCertificateFile "/usr/local/httpd/conf/server.crt" #文件的第145行定義證書路徑,我們將它修改爲我麼的證書路徑
146 SSLCertificateFile "/usr/local/httpd/openssl/fd.crt"

156 #SSLCertificateKeyFile "/usr/local/httpd/conf/server.key" #文件的第156行定義祕鑰路徑,我們將它修改爲我們的證書路徑
157 SSLCertificateKeyFile "/usr/local/httpd/openssl/fd.key"

3、編輯配置文件:/usr/local/httpd/conf/httpd.conf,注意先備份

52 Listen 80    #端口默認80,我們保持不變,不做修改

88 LoadModule socache_shmcb_module modules/mod_socache_shmcb.so #把80行的註釋去掉

131 LoadModule ssl_module modules/mod_ssl.so  #把131的註釋去掉

192 #ServerName www.example.com:80      #http的訪問域名我們還是要定義下的
193 ServerName www.watchmen.com

493 Include conf/extra/httpd-ssl.conf       #把493行的註釋去掉

4、啓動服務

NTP-slave:/usr/local/httpd/conf # /usr/local/httpd/bin/apachectl  start
httpd not running, trying to start
Apache/2.4.25 mod_ssl (Pass Phrase Dialog)
Some of your private key files are encrypted for security reasons.
In order to read them you have to provide the pass phrases.

Private key www.watchmenhttps.com:443:0 (/usr/local/httpd/openssl/fd.key)
Enter pass phrase:

OK: Pass Phrase Dialog successful.



結尾:



     感謝閱讀,祝有收穫的一天,謝謝!





發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章