之前都是在 UNIX-like 的系統下架設 apache 網頁伺服器,而且不論是 Linux 的套件管理系統,抑或是 FreeBSD 的 ports 都把安裝的程序作好了,所以比較少碰到裝不起來的問題。但來到 Windows 下來作這件事就頭大了!雖然不必辛苦地把相關的程式碼抓回來編譯,但還是要自己搞定一些相關的設定就是了,以下是我最近在 Windows 系統(目前是在 Windows XP)上安裝 apache + PHP + mod_ssl 的經驗記錄。
前置作業 – 需要下載的檔案
這裡我列出我完成這件事情所抓下來的檔案:
上述檔案我都附上可以去哪個網頁上找到,同時也將它們編號,這樣之後的說明都用編號表示用到哪個檔案。
安裝相關檔案
首先,直接安裝 1 ,用官方的這份安裝檔案的話,可以用 monitor 跟幫你裝成 Windows 服務,這樣就能設定開機時自動啟動 web 伺服器了。安裝時會要你填入相關的訊息,同時也留意一下你把 apache 裝在哪個目錄下(比方說 D:Apache)。
然後解開 3 ,也注意你把它解壓縮到何處(比方說 D:PHP ),解壓縮後,到 apache 的安裝目錄下的 conf 資料夾裡,修改 httpd.conf 這個檔案,然後在最後面加上下面這段:
# For PHP 5 do something like this:
LoadModule php5_module "d:/php/php5apache2.dll"
AddType application/x-httpd-php .php
# configure the path to php.ini
PHPIniDir "d:/php"
修改完之後,如果你的 apache 服務已經啟動(可以看右下角的工具列圖示),請先將它 stop,然後找個地方解開 2 ,我們需要把解開後的 bin 目錄下的 Apache.exe、 ssleay32.dll 及 libeay32.dll 放到你 apache 安裝目錄下的 bin 目錄裡,替換掉原本的 apache.exe。然後再將 2 解開後的 conf 目錄下的 ssl.conf 也複製一份到你自己 apache 目錄(如 D:Apache)下的 conf 目錄裡,還有 modules 目錄下的 mod_ssl.so 也要放到 apache 目錄下的 modules 目錄裡。
接著將 ssl.conf 裡找到下列這段敘述,然後把它改成你的設定:(用文字編輯器打開)
# General setup for the virtual host
DocumentRoot "你的網頁根目錄 可以找 httpd.conf 下的 DocumentRoot"
ServerName 你的 domain name:443
ServerAdmin 你的 email
ErrorLog logs/error_log
TransferLog logs/access_log
接下來我們要產生 SSL連線(HTTPS)時所需要加密的 key 及身份驗證用的 CA。首先,找個地方解開 4 ,比方說 D:OpenSSL ,接著再把 5 放到該目錄下,並且找到下列地方將它修改成:
dir = ssl
certs = $dir\certs
crl_dir = $dir\crl
database = $dir\index.txt
new_certs_dir = $dir
certificate = $dir\cacert.pem
serial = $dir\serial
crl = $dir\crl.pem
private_key = $dir\privkey.pem
RANDFILE = $dir\privkey.rnd
還有別忘了把這個檔案裡的 x509extensions 這一行在開頭加上 # 把它註解掉。然後在 D:OpenSSL 目錄下建立一個 ssl 資料夾,在裡面新增兩個檔案:index.txt 及 serial,index.txt 讓它保留空白即可,然後 serial 檔案裡打入 01 。
然後在命令列模式下(「開始」->「執行」打 cmd,然後用 cd 指令切到 D:OpenSSL)依序輸入下列指令:
- 產生 CA private key,它會要求你輸入密碼
openssl genrsa -des3 -out ssl/ca.key 1024- 產生 CA require cert,照著它的說明填入對應資料
openssl req -config openssl.cnf -new -key ssl/ca.key -out ssl/ca.csr- 產生 CA public cert
openssl x509 -days 3650 -req -signkey ssl/ca.key -in ssl/ca.csr -out ssl/ca.crt- 產生 Server private key
openSSL genrsa -out ssl/server.key 1024- 產生 Server require cert,這裡跟上面填入相同的資料
openssl req -config openssl.cnf -new -key ssl/server.key -out ssl/server.csr- 產生 Server public key
openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt
如果沒有錯誤訊息的話,那在你的 D:OpenSSLssl 資料夾下應該至少會有 ca.crt、server.crt 及 server.key 這三個檔案(確定它們不是 0 byte)。然後把 ca.crt 及 server.crt 放到 D:Apacheconfssl.crt 目錄下,而 server.key 放到 D:Apacheconfssl.key 目錄下。接著就檢視一下 D:Apacheconfssl.conf 檔案裡是不是有這幾行:
SSLCertificateFile conf/ssl.crt/server.crt
SSLCertificateKeyFile conf/ssl.key/server.key
SSLCertificateChainFile conf/ssl.crt/ca.crt
然後我自己是有把 ssl.conf 裡的 <ifdefine SSL> 及 </ifdefine> 註解掉,這就要看你要不要再去 httpd.conf 裡 define SSL 囉。
如果你很順利作到這裡,那就可以重新啟動 apache 的服務,然後試試看能不能用 https 連接到你的網頁伺服器吧!
本文參考:【懶人教學】建構您的 Apache + SSL on Win32 及 The Apache + SSL on Win32 HOWTO。
ericsk大大 :
用firefox連時, 回應是憑證不正確或已損毀, 請問是為什麼 ?
另外我發現server.crt檔案無法開啟… ca.crt就可以
我想指令如果沒有打錯的話,應該是沒什麼問題才是啊
還是你在填欄位的時候填了什麼奇怪的東西呢? @@
底下是我的server.crt 只有輸入common name=192.168.5.141, 如果方便的話請給我一個server.crt的範本,thanks
Certificate:
Data:
Version: 1 (0x0)
Serial Number: 1 (0x1)
Signature Algorithm: md5WithRSAEncryption
Issuer: CN=192.168.5.141
Validity
Not Before: Oct 4 03:31:04 2006 GMT
Not After : Oct 1 03:31:04 2016 GMT
Subject: CN=192.168.5.141
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:99:74:e4:cd:77:01:ca:1a:8f:de:3f:2d:51:b0:
fe:93:27:d2:20:4b:ac:f6:ed:db:f9:52:c4:f2:ad:
c3:53:bf:b8:31:b0:7a:3d:27:e8:5f:dc:3d:4b:76:
8d:ea:16:8d:a0:61:3e:b0:a0:79:15:57:86:8a:35:
07:a3:ad:7b:0a:d4:eb:98:26:71:84:7c:ab:70:d8:
12:06:33:2a:49:cb:19:1d:f8:a7:ed:5b:11:0d:7b:
d8:f6:94:f0:6f:dc:26:48:bc:9e:3b:56:ab:2c:36:
29:c2:bd:c1:93:1d:65:b7:64:fd:f4:cc:9e:c8:38:
d5:56:de:d8:24:ee:ca:d2:67
Exponent: 65537 (0x10001)
Signature Algorithm: md5WithRSAEncryption
38:22:0d:28:a2:9d:be:a5:4f:43:6c:9b:88:78:1d:04:04:bb:
ab:44:98:fa:c3:93:dd:b6:f6:30:5f:b5:9f:32:cd:b6:e9:d2:
bf:19:22:0a:d6:8d:f1:d3:e3:28:fd:a4:1f:5e:69:60:17:e5:
26:63:6e:38:41:7e:cc:06:b8:c5:5c:22:9f:de:50:a1:c9:32:
f7:82:62:eb:c7:d4:76:2c:8b:bf:58:66:97:08:a7:d9:43:17:
5b:f3:f8:4f:63:f2:77:02:39:ca:dc:38:21:8b:15:32:27:fc:
d4:15:3b:7e:3f:e0:85:6d:37:8c:70:77:bf:b1:24:25:74:f1:
1e:82
—–BEGIN CERTIFICATE—–
MIIBnzCCAQgCAQEwDQYJKoZIhvcNAQEEBQAwGDEWMBQGA1UEAxMNMTkyLjE2OC41
LjE0MTAeFw0wNjEwMDQwMzMxMDRaFw0xNjEwMDEwMzMxMDRaMBgxFjAUBgNVBAMT
DTE5Mi4xNjguNS4xNDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAJl05M13
Acoaj94/LVGw/pMn0iBLrPbt2/lSxPKtw1O/uDGwej0n6F/cPUt2jeoWjaBhPrCg
eRVXhoo1B6OtewrU65gmcYR8q3DYEgYzKknLGR34p 1bEQ172PaU8G/cJki8njtW
qyw2KcK9wZMdZbdk/fTMnsg41Vbe2CTuytJnAgMBAAEwDQYJKoZIhvcNAQEEBQAD
gYEAOCINKKKdvqVPQ2ybiHgdBAS7q0SY sOT3bb2MF 1nzLNtunSvxkiCtaN8dPj
KP2kH15pYBflJmNuOEF zAa4xVwin95Qocky94Ji68fUdiyLv1hmlwin2UMXW/P4
T2PydwI5ytw4IYsVMif81BU7fj/ghW03jHB3v7EkJXTxHoI=
—–END CERTIFICATE—–
那就附上我隨便作的一個吧 :p
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 1 (0x1)
Signature Algorithm: sha1WithRSAEncryption
Issuer: C=TW, ST=Taiwan, L=Kaohsiung, O=ERICSK, OU=ERICSK, CN=ERICSK/emailAddress=foo@bar.cc
Validity
Not Before: Oct 4 04:16:55 2006 GMT
Not After : Oct 1 04:16:55 2016 GMT
Subject: C=TW, ST=Taiwan, O=ERICSK, OU=ERICSK, CN=ERICSK/emailAddress=foo@bar.cc
Subject Public Key Info: Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:c0:f2:d5:86:f8:e8:7a:7d:b6:77:c2:06:2e:95:
ad:73:36:2f:9a:df:c6:a3:4d:ad:1b:79:60:02:84:
d8:60:f1:6a:f9:27:9f:bb:51:6d:90:de:30:c1:26:
a2:92:6e:b6:c3:c6:a5:3d:b3:0a:74:a0:e1:45:4c:
09:e7:c0:3a:8e:d4:14:4e:18:70:15:17:a2:da:7a:
19:85:91:03:e1:a1:31:b5:e6:38:49:ce:e7:3e:02:
c5:75:e8:87:c2:bc:ab:26:98:69:4e:f8:33:25:ab:
9d:f8:e3:04:07:ce:c4:59:dc:99:08:b4:0f:bc:83:
11:ec:f1:cb:2a:12:c2:03:d9
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Basic Constraints:
CA:FALSE
Netscape Comment:
OpenSSL Generated Certificate
X509v3 Subject Key Identifier:
15:19:C2:2E:E0:D2:89:39:A9:17:48:7D:F9:26:C5:E1:68:EF:A0:51
X509v3 Authority Key Identifier:
DirName:/C=TW/ST=Taiwan/L=Kaohsiung/O=ERICSK/OU=ERICSK/CN=ERICSK/emailAddress=foo@bar.cc
serial:D3:EA:9B:52:76:30:4A:C0
Signature Algorithm: sha1WithRSAEncryption
72:63:63:ca:d6:d3:06:85:0c:31:8b:06:3d:dc:de:4a:eb:97:
00:af:25:40:b7:14:e1:03:5d:be:e9:00:79:70:72:56:9c:19:
73:c9:24:b4:81:7d:78:5d:7d:7e:d6:fd:44:42:b0:9a:ea:32:
d3:c4:29:e7:8d:b1:37:5a:a8:f9:8e:8c:fe:94:f5:0f:21:df:
ab:df:23:e0:2e:12:6e:b9:b0:b4:08:5e:b8:f5:24:e6:f6:92:
81:d0:65:94:01:ea:95:cd:27:aa:cc:ef:6d:c8:0d:1b:d8:94:
9f:65:7f:41:e0:a7:57:ad:10:20:73:1c:cb:c6:ee:96:43:c6:
d9:5c
-----BEGIN CERTIFICATE-----
MIIDYTCCAsqgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgDELMAkGA1UEBhMCVFcx
DzANBgNVBAgTBlRhaXdhbjESMBAGA1UEBxMJS2FvaHNpdW5nMQ8wDQYDVQQKEwZF
UklDU0sxDzANBgNVBAsTBkVSSUNTSzEPMA0GA1UEAxMGRVJJQ1NLMRkwFwYJKoZI
hvcNAQkBFgpmb29AYmFyLmNjMB4XDTA2MTAwNDA0MTY1NVoXDTE2MTAwMTA0MTY1
NVowbDELMAkGA1UEBhMCVFcxDzANBgNVBAgTBlRhaXdhbjEPMA0GA1UEChMGRVJJ
Q1NLMQ8wDQYDVQQLEwZFUklDU0sxDzANBgNVBAMTBkVSSUNTSzEZMBcGCSqGSIb3
DQEJARYKZm9vQGJhci5jYzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAwPLV
hvjoen22d8IGLpWtczYvmt/Go02tG3lgAoTYYPFq Sefu1FtkN4wwSaikm62w8al
PbMKdKDhRUwJ58A6jtQUThhwFRei2noZhZED4aExteY4Sc7nPgLFdeiHwryrJphpTvgzJaud OMEB87EWdyZCLQPvIMR7PHLKhLCA9kCAwEAAaOB/TCB jAJBgNVHRME
AjAAMCwGCWCGSAGG EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZpY2F0
ZTAdBgNVHQ4EFgQUFRnCLuDSiTmpF0h9 SbF4WjvoFEwgZ8GA1UdIwSBlzCBlKGB
hqSBgzCBgDELMAkGA1UEBhMCVFcxDzANBgNVBAgTBlRhaXdhbjESMBAGA1UEBxMJ
S2FvaHNpdW5nMQ8wDQYDVQQKEwZFUklDU0sxDzANBgNVBAsTBkVSSUNTSzEPMA0G
A1UEAxMGRVJJQ1NLMRkwFwYJKoZIhvcNAQkBFgpmb29AYmFyLmNjggkA0 qbUnYw
SsAwDQYJKoZIhvcNAQEFBQADgYEAcmNjytbTBoUMMYsGPdzeSuuXAK8lQLcU4QNd
vukAeXByVpwZc8kktIF9eF19ftb9REKwmuoy08Qp542xN1qo Y6M/pT1DyHfq98j
4C4SbrmwtAheuPUk5vaSgdBllAHqlc0nqszvbcgNG9iUn2V/QeCnV60QIHMcy8bu
lkPG2Vw=
-----END CERTIFICATE-----
你好:我按照步驟作,可以現在變成HTTP可以顯示網頁,使用HTTPS連線時,卻顯示無法顯示網頁,請問要如何解決呢
應該是你 ssl.conf 裡的 IFDEFINE 沒有拿掉吧?
你好:我在命令模式下打:APACHE -D SSL
出現以下訊息.請問市哪裡出錯呢
(OS 10048)一次只能用一個通訊端位址 (通訊協定/網路位址/連接埠)。 : make_sock: could not bind to address 0.0.0.0:80
no listening sockets available, shutting down
Unable to open logs
從訊息來看,應該是前一次的 apache 沒有 shutdown 吧?因為 port 80 被佔住了 :p
Using configuration from openssl.cnf
Loading ‘screen’ into random state – done
Enter pass phrase for ssl/ca.key:
I am unable to access the ssl
ewcerts directory
ssl
ewcerts: Invalid argument
前幾個動作都沒問題,最後要產生server.crt卻發生此訊息
To 大尾連: 您是不是什麼目錄沒有事先建好呢?
請問一下喔 我在建立server.crt出現以下錯誤
這問題是出在什麼地方呢??
OpenSSL> ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key
-in ssl/server.csr -out ssl/server.crt
Using configuration from openssl.cnf
Loading ‘screen’ into random state – done
Enter pass phrase for ssl/ca.key:
Error Loading extension section x509v3_extensions
5704:error:02001002:system library:fopen:No such file or directory:.cryptobio
bss_file.c:122:fopen(‘sslindex.txt.attr’,’rb’)
5704:error:2006D080:BIO routines:BIO_new_file:no such file:.cryptobiobss_file
.c:125:
5704:error:0E078072:configuration file routines:DEF_LOAD:no such file:.cryptoc
onfconf_def.c:197:
5704:error:0E06D06C:configuration file routines:NCONF_get_string:no value:.cryp
toconfconf_lib.c:329:group=CA_default name=email_in_dn
5704:error:2206506F:X509 V3 routines:V2I_ASN1_BIT_STRING:unknown bit string argu
ment:.cryptox509v3v3_bitst.c:132:section:,name:0x40,value:
5704:error:22098080:X509 V3 routines:X509V3_EXT_nconf:error in extension:.crypt
ox509v3v3_conf.c:93:name=nsCertType, value=0x40
error in ca
OpenSSL>
看錯誤訊息很明顯是路徑錯了 🙂
x509extensions…
不好意思 是我自己沒把這助註解調ˊˋ
感謝 ^^ 我終於安裝成功了=.=
再失敗第N次之後終於成功啦@_@
還有你有個地方少打了
httpd.conf之中的
LoadModule ssl_module modules/mod_ssl.so
要把他註解拿掉~~
你上面沒寫@_@
也許我們版本不同吧..XD
不過我幾乎都不會在 Windows 上跑這些東西
這篇文章的誕生只是剛好有需要,順便作個記錄而已 *汗*
寫得不完整的地方還請見諒囉
我的配置、啟動都成功了,但就是不能用https訪問站點。譬如:https://localhost不能訪問。錯誤提示是找不到服務器或DNS錯誤。問題錯在何處。錯誤日誌提示:Apache/2.0.59 (Win32) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/5.2.2 configured — resuming normal operations
Server built: Jul 27 2006 15:55:03
Parent: Created child process 3240
Init: Session Cache is not configured [hint: SSLSessionCache]
Child 3240: Child process is running
Child 3240: Acquired the start mutex.
Child 3240: Starting 250 worker threads.
看一下你 telnet localhost 443 有沒有動靜, 如果沒辦法連線, 那就表示你可能沒有在 httpd.conf 或 ssl.conf 裡打開 443 這個 port
你好!
我是在localhost上想试验ssl功能,根据指导,各项配置运行没有问题。但是无法实现https功能,甚是迷惑:
1、关于以下设置:———————
# General setup for the virtual host
DocumentRoot “你的網頁根目錄 可以找 httpd.conf 下的 DocumentRoot”
ServerName 你的 domain name:443
ServerAdmin 你的 email
ErrorLog logs/error_log
TransferLog logs/access_log
————————————————
是不是表明通过443和80端口访问同一个目录?如何区分访问不同端口功能呢?
2、apache启动如下:
[Mon Jun 11 22:15:32 2007] [notice] Apache/2.0.59 (Win32) mod_ssl/2.0.59 OpenSSL/0.9.8d PHP/5.2.2 mod_jk2/2.0.4 configured — resuming normal operations
[Mon Jun 11 22:15:32 2007] [notice] Server built: Jul 27 2006 15:55:03
[Mon Jun 11 22:15:32 2007] [notice] Parent: Created child process 1760
[Mon Jun 11 22:15:33 2007] [notice] Child 1760: Child process is running
[Mon Jun 11 22:15:33 2007] [notice] Child 1760: Acquired the start mutex.
[Mon Jun 11 22:15:33 2007] [notice] Child 1760: Starting 250 worker threads.
但尝试不同方式都无法实现httpssl功能。
3、我做的各项配置主要有:
(1)ssl.conf
—————————————–
# General setup for the virtual host
DocumentRoot “D:/sever/www”(该目录为httpd.conf中的documentroot)
ServerName 127.0.0.1:443
ServerAdmin sunkq@cnqd.net
ErrorLog logs/error_log
TransferLog logs/access_log
————————————–
将 变为
#
……
……
#
不知道是不是理解正确了你的意思?
—————————————
(2)httpd.conf中都作了相应修改。
心中甚是郁闷,请不吝赐教,谨表谢意!
这一部分没有显示出来,重写:
“将ssl.conf 裡的 及 註解掉”
我于是将他们变为
#
……
……
#
不知道对否?
你的 httpd.conf 裡有 Include “ssl.conf” 嗎?
我继续试验了,做了两个virtualhost,一个80端口(httpd.conf中实现http),一个443端口(ssl.conf中实现https),分别指向不同目录,都可以运转。
所以是不是如我所做设置,而不是仅设置一个443的virtualhost?因为对ssl功能实现还没有更深入的了解,目前仅仅是试验的结果,我们可以再探讨。
另外,我httpd.conf 裡有 Include “ssl.conf”。
請問strikefreedom ,
我也是有出現xxxx BIO_new_file:no such file:.cryptobiobss_file…..的問題, 但找不到哪裡設定錯誤是否可以教我修改呢?
其他都正确,怎么到“產生 Server public key
”这一步得时候,得到这样得提示呢
Using configuration from openssl.cnf
Loading ‘screen’ into random state – done
Enter pass phrase for ssl/ca.key:
sslindex.txt: No such file or directory
unable to open ‘sslindex.txt’
4996:error:02001002:system library:fopen:No such file or directory:.cryptobio
bss_file.c:352:fopen(‘sslindex.txt’,’rb’)
4996:error:20074002:BIO routines:FILE_CTRL:system lib:.cryptobiobss_file.c:35
4:
这sslindex.txt是哪里来得
你有建立 index.txt 這個檔案嗎?
[quote comment=””]請問為什麼要將”x509 extensions”這一行註解掉,在檔案 openssl.cnf中?[/quote]
vodkawa: 因為沒裝啊 XD
找不到libphp5.so這個檔,php5的安裝只更新.cnf
怎麼辦?
大大請解..
關於大尾連的問題,出現以下的錯誤訊息,我也有遇到,不過我解決了
—–<>—–
I am unable to access the ssl
ewcerts directory
ssl
ewcerts: Invalid argument
請把 openssl.cnf 當中的資料夾路徑 “” 改成 “\” 就可以了
我是注意到錯誤訊息中 “ewcerts directory”
前面加上一個 “n” 就是 newcerts
openssl.cnf 原來的設定是
new_certs_dir = $dirnewcerts
其中 “” 加上 “n” 正好組成換行字元 “n”
錯誤訊息才會以那樣怪異的格式出現
所以我聯想到,是不是在設定檔中要使用 escape 語法
將資料夾表示成為 “\”,果然不出所料 🙂
您好,按照上面的步骤,在执行到第6步:產生 Server public key
在命令行中输入: openssl ca -config openssl.cnf -days 3650 -cert ssl/ca.crt -keyfile ssl/ca.key -in ssl/server.csr -out ssl/server.crt 回车后,提示输入密码,但无法输入。已经建立ssl这个文件夹了。请问为什么呢?谢谢。
直接敲 回车,返回信息如下:
Using configuration from openssl.cnf
Loading ‘screen’ into random state – done
Enter pass phrase for ssl/ca.key:
unable to load CA private key
1676:error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt:.
cryptoevpevp_enc.c:461:
1676:error:0906A065:PEM routines:PEM_do_header:bad decrypt:.cryptopempem_lib.
c:425:
請問ssl認證也是這樣設定嗎?
目前想要跑網頁,
但一直在log error出現SSL certificate problem, verify that the CA cert is OK.
一般看到的解決方法是在網站載下pem檔案,但還是沒有成功
不曉得這個設定是否也是用在設定CA CERT?
麻煩你了 :=)