文章出處

Windows下搭建HTTP/HTTPS服務器及測試過程。

1 安裝Apache

http://www.apachehaus.com/cgi-bin/download.plx

選擇合適的版本下載

本次下載的是 Apache 2.4.x VC14

Apache版本號:httpd-2.4.25-x64

OpenSSL版本號:OpenSSL 1.0.2j

解壓后按照readme_first.html文檔中步驟進行測試和安裝:

1)將解壓后的Apache24文件夾復制到C:\

2)在命令行輸入

cd C:\Apache24\bin

3)測試Apache安裝條件是否滿足

在命令行輸入

httpd.exe

若無錯誤,在IE瀏覽器地址欄輸入http://localhost,若能正常打開網頁說明Apache能正常安裝;若報錯,根據錯誤提示排除錯誤,直到可以正常運行httpd.exe并能訪問http://localhost

4)開始安裝

在命令行輸入

httpd -k install

完成安裝后沒有圖形操作界面,Apache所有操作都在命令行進入 C:\Apache24\bin目錄后用命令完成的,詳見后文。

2 Apache常用操作命令

安裝Apache24后沒有圖形界面,需要在命令行操作,首先進入Apache bin目錄

cd C:\Apache24\bin

常用命令:

httpd -k install /* 安裝Apache

/

httpd -k uninstall /

卸載Apache

/

httpd -k start /

啟動Apache

/

httpd -k stop /

停止Apache

/

httpd -k retart /

重啟Apache */

3 制作CA證書、Server證書和Client證書

3.1 準備工作

在C:\Apache24\bin目錄下創建demoCA目錄,并在該目錄下創建如下幾個文件和文件夾

index.txt

newcerts\

serial

注:

serial文件沒有文件后綴

用文本編輯器打開serial,并寫入'01'(實際操作時不要加引號)

打開命令行,進入C:\Apache22\bin

cd C:\Apache22\bin

3.2 生成CA證書

1)生成CA私鑰

openssl genrsa -out ca.key 2048

命令描述:

該命令會在當前目錄下生成一個私鑰文件ca.key

參數說明:

gensa:生成rsa密鑰

-out:指定輸出的文件名

2048:密鑰長度

2)生成CA證書

openssl req -new -x509 -days 5000 -key ca.key -out ca.crt

命令描述:

該命令會在當前目錄下生成一個自簽名的CA證書文件ca.crt

參數說明:

req:請求操作

-new:生成新的文件

-x509:證書文件的格式

-days:證書有效期

-key:指定私鑰文件

-out:指定輸出文件

注:

由于CA文件是用來給其他證書簽名文件簽名以生成對應的證書文件的,不需要其他文件給CA證書簽名,因此生成的CA證書是自簽名的。

3.3 生成Server端證書

1)生成Server證書私鑰

openssl genrsa -out server.key 2048

2)生成Server證書請求文件

openssl req -new -key server.key -out server.csr

命令描述:

該命令會在當前目錄下生成一個證書請求文件server.csr,用CA證書給證書請求文件簽名后即可生成證書文件。

參數說明:

req:請求操作

-new:生成新的文件

-key:指定私鑰文件

-out:指定輸出文件

運行該命令時,命令行會提示輸入CountryName(填CN),ProvinceName和CommonName等。CommonName(公用名)是個很重要的參數,如果要在外網訪問HTTP/HTTPS服務器,CommonName必須填服務器的域名或者公網IP;如果只在內網做測試,CommonName可以填服務器主機的內網IP。

注:

由于Server的證書請求文件需要被CA證書文件簽名后才能生成證書文件,不能使用自簽名,因此不使用-x509選項

3)生成Server證書

openssl ca -in server.csr -out server.crt -cert ca.crt -keyfile ca.key

命令描述:

該命令使用CA證書對證書請求文件簽名,以生成證書文件

參數說明:

ca:表示是對證書請求文件進行簽名

-in:指定輸入的證書請求文件

-out:指定輸出文件

-cert:指定CA證書文件

-keyfile:指定CA私鑰文件

4)驗證Server證書

openssl verify -CAfile ca.crt server.crt

命令描述:

該命令用于驗證生成的證書文件是否正確,若正確則輸出OK,若錯誤則輸出ERROR。

命令說明:

verify:表示是對證書文件進行認證

-CAfile:指定CA證書文件

3.4 生成Client端證書

1)生成Client私鑰

openssl genrsa -out client.key 2048

2)生成Client證書請求文件

openssl req -new -key client.key -out client.csr

注意:

生成Client端證書請求文件時,ON(Organization Name)必須與生成服務器時使用的ON一樣,并且OU(Organizational Unit Name)和CN(Common Name)不能與生成Server端證書請求文件時使用的OU和CN相同,否則會報錯,原因是不能同時給同一個Server生成兩個證書請求文件。

3)生成Client證書

openssl ca -in client.csr -out client.crt -cert ca.crt -keyfile ca.key

4)驗證Client證書

openssl verify -CAfile ca.crt client.crt

5)生成p12格式的Client證書

openssl pkcs12 -export -inkey client.key -in client.crt -out client.pfx

注:

由于在Windows下瀏覽器只能安裝p12格式的客戶端證書,因此要將.crt格式的Client證書轉換成p12格式的證書。在SSL雙向認證時需要客戶端也安裝自己的證書文件。

4 配置HTTP服務器

修改 Apache24\conf\httpd.conf 文件:

1)修改偵聽端口號,將‘Listen 80’中的80改為想要設置的HTTP偵聽端口號

若改成80端口以外的端口號,在用瀏覽器訪問HTTP服務器時,URL中需指明端口號,格式是:

其中,hostip指HTTP服務器主機的IP或域名,port是HTTP服務器偵聽端口號

建議使用默認值80,若改為其他值,在服務器上用wireshark抓IP進行分析時,wireshark不能解析HTTP報文,不利于分析。

2)將DocumentRoot " \({SRVROOT}/htdocs"用#注釋掉,改為 DocumentRoot "D:\httpdocs" #DocumentRoot "\) {SRVROOT}/htdocs"

DocumentRoot "D:\httpdocs"

3)將用#注釋掉,改為 #

注:

D:/httpdocs就是HTTP訪問的文件根目錄,也可以改成其他文件目錄,但DocumentRoot和Directory中的目錄必須一致

5 配置HTTPS服務器

5.1 修改 Apache24\conf\httpd-ssl.conf 文件

1)修改偵聽端口號,將‘Listen 433'中的443改為想要偵聽的端口。

同樣建議使用默認值443,若改為其他值,在服務器上用wireshark抓IP進行分析時,wireshark不能解析HTTPS報文。

2)將 SSLCertificateFile 后面的服務器證書文件路徑修改為 " \({SRVROOT}/conf/ssl/server.crt" SSLCertificateFile "\) {SRVROOT}/conf/ssl/server.crt"

SRVROOT變量的值就是“/Apache24”

3)將SSLCertificateKeyFile后面的服務器私鑰文件路徑修改為 " \({SRVROOT}/conf/ssl/server.key" SSLCertificateKeyFile "\) {SRVROOT}/conf/ssl/server.key"

4)將SSLCACertificateFile后面的CA證書文件路徑修改為 " \({SRVROOT}/conf/ssl/ca.crt" SSLCACertificateFile "\) {SRVROOT}/conf/ssl/ca.crt"

此項設置只用于雙向認證,如果不需要做雙向認證,CA證書路徑不設置

5)將DocumentRoot后面的文件路徑修改為 "D:\httpsdocs"

DocumentRoot "D:\httpsdocs"

6)將以下3行用#號注釋掉

SSLOptions +StdEnvVars

增加以下行:

SSLOptions +StdEnvVars

Options +Indexes FollowSymLinks +ExecCGI

AllowOverride AuthConfig FileInfo

Order allow,deny

Allow from all

此處若不做修改,HTTPS服務器會無法訪問,瀏覽器會顯示403錯誤,錯誤信息是“服務器可能要求登錄”。

注:

與設置HTTP服務器時類似,DocumentRoot和Directory表示HTTPS訪問的文件根目錄,可以設置成任何目錄,但DocumentRoot和Directory設置值必須保持一致

7)如果需要設置SSL雙向認證,需要將以下兩行前的#注釋符刪掉(即取消注釋):

SSLVerifyClient require

SSLVerifyDepth 10

5.2 修改Apache24\conf\extra\httpd-ahssl.conf文件

該文件中有三段以 行結尾的文本。后面兩段配置文本配置的是兩個虛擬主機,ServerName分別是serverone.tld:443和servertwo.tld:443。這兩個虛擬主機我們都不用,因此將后面兩段之間(包括這兩行)的內容用#注釋掉。

接下來修改第一段之間的配置文本,ServerName是localhost:443。

1)修改偵聽端口號,將‘Listen 433'中的443改為想要偵聽的端口。

建議使用443默認值,若改為其他值,在服務器上用wireshark抓IP進行分析時,wireshark不能解析HTTPS報文。

2)將SSLCertificateFile后面的服務器證書路徑修改為 " \({SRVROOT}/conf/ssl/server.crt" SSLCertificateFile "\) {SRVROOT}/conf/ssl/server.crt"

3)將SSLCertificateKeyFile后面的服務器私鑰文件路徑修改為 " \({SRVROOT}/conf/ssl/server.key" SSLCertificateKeyFile "\) {SRVROOT}/conf/ssl/server.key"

4)將DocumentRoot " \({SRVROOT}/htdocs" 注釋掉,修改為DocumentRoot "D:/httpsdocs" # DocumentRoot "\) {SRVROOT}/htdocs"

DocumentRoot "D:\httpsdocs"

5)將注釋掉,修改為 #

注:

若此處是

SSLOptions +StdEnvVars 那么需要將這3行注釋掉,增加以下行 SSLOptions +StdEnvVars Options +Indexes FollowSymLinks +ExecCGI AllowOverride AuthConfig FileInfo Order allow,deny Allow from all 安裝httpd-2.4.25-x64時此處此處已經改好了,不需要另外做修改;但在安裝httpd-2.2.32-x86時發現需要修改的。 6)如果要配置SSL雙向認證,需在SSLCertificateKeyFile "\) {SRVROOT}/conf/ssl/server.key"行之后增加以下3行內容:

SSLCACertificateFile "${SRVROOT}/conf/ssl/ca.crt"

SSLVerifyClient require

SSLVerifyDepth 10

5.3 配置SSL單向認證/雙向認證

如果需要將HTTPS服務器配置成SSL雙向認證,打開5.2節7)的設置和5.3節7)的設置,重啟Apache;

如果需要將HTTPS服務器配置成SSL單向認證,將5.2節7)的設置和5.3節7)的設置注釋掉,重啟Apache;

6 瀏覽器測試

測試之前,在D:/httpdocs目錄下新建一個index.html文件,用文本編輯器打開后寫入“HTTP works”;在D:/httpsdocs目錄下同樣新建一個index.html文件,寫入“HTTPS works”。

6.1 測試HTTP服務器

在局域網內另一臺電腦的IE瀏覽器地址欄輸入http://hostip,其中hostip是服務器主機的IP或域名。

如果瀏覽器中顯示“HTTP如果瀏覽器中顯示“HTTP works”,表示HTTP服務器工作正常。

6.2 測試HTTPS單向認證

按照第5章的描述將HTTPS服務器設置成SSL單向認證

1)在IE瀏覽器地址欄輸入https://hostip(hostip是服務器的IP或域名),此時無法正常訪問服務器,原因是沒有導入服務器的證書和CA證書。

2)導入服務器證書和CA證書

打開IE瀏覽器"Internet選項"——>“內容”——>“證書”,在彈出的“證書”窗口中,點擊“受信任的根證書頒發機構”,導入ca.crt文件;然后點擊“受信任的發布者”,導入server.crt文件。

3)重啟IE瀏覽器,在地址欄輸入https://hostip,如果顯示“HTTPS works”,則表示HTTPS服務器工作正常。

6.3 測試HTTPS雙向認證

按照第4章的描述將HTTPS服務器設置成SSL雙向認證

1)在IE瀏覽器地址欄輸入https://hostip

此時會發現,雖然已經導入服務器的證書和CA證書,但仍然無法正常訪問HTTPS服務器,原因是設置了SSL雙向認證后,服務器也會對客服端進行認證,只有受信任的客戶端才能訪問服務器。

2)雙擊client.pfx文件,安裝客戶端證書

完成客戶端證書的安裝后,在IE瀏覽器“Internet選項”——>“內容”——>“證書”——>"個人“中看到安裝的client證書

3)重啟IE瀏覽器,在地址欄輸入https://iphost

這時會發現就已經可以正常訪問HTTPS服務器了。

看文倉www.kanwencang.com網友整理上傳,為您提供最全的知識大全,期待您的分享,轉載請注明出處。
歡迎轉載:http://www.kanwencang.com/bangong/20170214/101312.html

文章列表


不含病毒。www.avast.com
arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()