linux下带ssl的php环境配置.docx
- 文档编号:28702086
- 上传时间:2023-07-19
- 格式:DOCX
- 页数:9
- 大小:22.16KB
linux下带ssl的php环境配置.docx
《linux下带ssl的php环境配置.docx》由会员分享,可在线阅读,更多相关《linux下带ssl的php环境配置.docx(9页珍藏版)》请在冰豆网上搜索。
linux下带ssl的php环境配置
本文作者:
原奥索网用户herodong
/*孤狼:
原文实在太大了,36K多。
我选择重要部分贴上,如果需要原文可以MAILTO:
wolflx@
我们的目标是安装一个允许我们托管多个网站的web服务器,其中一些是针对电子商务的安全解决方案,而大部分网站是通过连接一个数据库服务器并且提取其数据的脚本驱动的。
为了这个任务所需的工具是:
Apache-一个网站服务器
Mod_SSL-一个安全套接字层(SSL)的模块
OpenSSL-开放源代码工具箱(mod_ssl所需)
RSARef-仅对美国用户
MySQL-一个数据库服务器
PHP-一种脚本语言
“条条大路通罗马”……因此这只是很多能达到我们要求的配置之一。
我选择这样的配置,是因为它是最简单和最快的一种。
选择Mod_SSL/OpenSSL的原因是因为我有它的先前经验,是最快配置和最容易安装的一种。
为了彼此方便地与Apache集成,我选择了PHP和MySQL。
记住,Perl能做到你想要做任何工作,然而,PHP对任何想学习它地程序员来说简单并且容易。
希望你将在结束这个简单的指南后能成功地完成下列目标。
安装并设置MySQL数据库服务器
安装并设置具备SSL的Apache网站服务器
安装并配置服务器端脚本的PHP4.0超文本预处理器
创造一些样本证书用于ApacheSSL
本文假设你已经把下列软件安装在你的系统上了。
Perl(最好是ver5+)
gzip或gunzip
gcc和GNUmake
准备
Apache(Web服务器)-http:
//www.apache.org
Mod_SSL(安全服务器层)-http:
//www.modssl.org
OpenSSL(SSL工具箱)-http:
//www.openssl.org
PHP(脚本语言)-
MySQL(SQL数据库服务器)-
下载所有(tar文件)源代码到一个临时目录下。
保证你把他们放在有很多空间的地方……你应该以root身份下载他们以避免权限问题。
我们的计划
我们的计划是首先安装MySQL服务器并保证它工作,然后我们将安装PHP和Mod_SSL,最后我们将安装Apache网站服务器。
在我们安装了Apache以后,我们可以测试PHP和Mod_SSL支持是否起作用了。
MySQL源代码安装(UNIX)
你必须用来执行安装MySQL源代码分发的基本命令是(自一个没解开“tar”文件):
通过使用su成为root用户。
$su
直接进入你有tar文件的目录。
(使用一个临时目录。
这里使用/tmp/download/)
#cd/tmp/download/
使用下列命令提取文件。
#gunzip-d-cmysql-3.22.xx.tar.gz|tarxvf-
改变到新目录,它在提取期间创建。
#cdmysql-3.22.xx
现在你可以开始“配置”MySQL服务器。
你可以用configure指定很多选项,使用configure--help查看所有的选项。
我已经选择--prefix指定到安装地点的直接路径。
configure将检查你的编译器和一些其他东西。
如果你有任何错误,你可以检查config.cache文件查看错误。
#configure--prefix=/usr/local/mysql
在你完成了配置以后,你可以执行下列命令make真正的二进制代码。
#make
现在你已准备好安装所有的二进制代码。
运行下列命令在你用configure--prefix选项指定的目录下安装二进制代码。
#makeinstall
PHP安装(UNIX)
现在安装PHP语言。
你下载了最新的beta版,但是你可能必须下载非beta版本。
记住beta版本需要GNUmake。
你仍然假定是root,如果不是,su回到root。
PHP要求你已经预先配置好的Apache,以便它能知道所需的东西在哪儿。
在以后你安装Apache服务器时,你将会回到这里。
改变到你有源代码的目录。
#cd/tmp/DOWNLOAD
#gunzip-capache_1.3.x.tar.gz|tarxf-
#cdapache_1.3.x
#./configure
#cd..
好的,现在你可以开始PHP的安装。
提取源代码文件并进入其目录。
如果你下载了版本3,在数字和命令上有一个改变,不大的改变。
#gunzip-cphp-4.0.x.tar.gz|tarxf-
#cdphp-4.0.x
如果你正在编译代码,configure将永远是你的朋友。
:
-)因此,configure有很多选项。
使用configure--help确定你想要增加哪些。
我只是需要MySQL和LDAP,并且当然Apache。
#./configure--with-mysql=/usr/local/mysql\
--with-xml\
--with-apache=../apache_1.3.x\
--enable-track-vars\
--with-ldap
make并安装二进制代码。
#make
#makeinstall
拷贝ini文件到lib目录。
#cpphp.ini-dist/usr/local/lib/php.ini
Apache与Mod_SSL
该配置并安装mod_ssl和Apache了。
对此,你将需要有rsaref-2.0文件。
在
创建rasref目录,你将在该目录提取文件。
注意。
这假定你下载了一个临时目录,而你就在此目录。
#mkdirrsaref-2.0
#cdrsaref-2.0
#gzip-d-c../rsaref20.tar.Z|tarxvf-
现在配置并构造OpenSSL库。
#cdrsaref-2.0
#cp-rpinstall/unixlocal
#cdlocal
#make
#mvrsaref.alibrsaref.a
#cd../..
安装OpenSSL。
记住,你将用它来创建临时证书和CSR文件。
--prefix选项指定主安装目录。
#cdopenssl-0.9.x
#./config-prefix=/usr/local/ssl\
-L`pwd`/../rsaref-2.0/local/rsaref-fPIC
现在make、测试并安装它。
#make
#maketest
#makeinstall
#cd..
我们将配置MOD_SSL模块,然后用Apache配置指定它为一个可装载的模块。
#cdmod_ssl-2.5.x-1.3.x
#./configure\
--with-apache=../apache_1.3.x\
#cd..
现在我们可以把更多的Apache模块加到Apache源代码树中。
可选的--enable-shared=ssl选项使得mod_ssl构造成为一个DSO“libssl.so”。
关于在Apache支持DSO的更多信息,阅读Apache源代码树中的INSTALL和htdocs/manual/dso.html文档。
我强烈建议ISP和软件包装维护者为了最灵活地使用mod_ssl而使用DSO工具,但是注意,DSO不是在所有平台上的Apache都支持。
#cdapache_1.3.x
#SSL_BASE=../openssl-0.9.x\
RSA_BASE=../rsaref-2.0/local\
./configure\--enable-module=ssl\
--activate-module=src/modules/php4/libphp4.a\
--enable-module=php4--prefix=/usr/local/apache\
--enable-shared=ssl
[...你可加入更多的选项...]
生成Apache,然后生成证书,并安装...
#make
如果你已正确地完成,你将得到类似于以下的信息:
+-----------------------------------------------------------------------+
|BeforeyouinstallthepackageyounowshouldpreparetheSSL|
|certificatesystembyrunningthe'makecertificate'command.|
|Fordifferentsituationsthefollowingvariantsareprovided:
|
||
|%makecertificateTYPE=dummy(dummyself-signedSnakeOilcert)|
|%makecertificateTYPE=test(testcertsignedbySnakeOilCA)|
|%makecertificateTYPE=custom(customcertsignedbyownCA)|
|%makecertificateTYPE=existing(existingcert)|
|CRT=/path/to/your.crt[KEY=/path/to/your.key]|
||
|UseTYPE=dummywhenyou'reavendorpackagemaintainer,|
|theTYPE=testwhenyou'reanadminbutwanttodotestsonly,|
|theTYPE=customwhenyou'reanadminwillingtorunarealserver|
|andTYPE=existingwhenyou'reanadminwhoupgradesaserver.|
|(ThedefaultisTYPE=test)|
||
|AdditionallyaddALGO=RSA(default)orALGO=DSAtoselect|
|thesignaturealgorithmusedforthegeneratedcertificate.|
||
|Use'makecertificateVIEW=1'todisplaythegenerateddata.|
||
|ThanksforusingApache&mod_ssl.RalfS.Engelschall|
|rse@|
||
+-----------------------------------------------------------------------+
现在你可以创建一个定制的证书。
该选项将提示输入你的地址、公司、和其他一些东西。
关于证书,请参阅本文的结尾。
#makecertificateTYPE=custom
现在安装Apache...
#makeinstall
如果一切正常,你应该看到类似于以下的信息:
+----------------------------------------------------------------------------------+
|Younowhavesuccessfullybuiltandinstalledthe|
|Apache1.3HTTPserver.ToverifythatApacheactually|
|workscorrectlyyounowshouldfirstcheckthe|
|(initiallycreatedorpreserved)configurationfiles|
||
|/usr/local/apache/conf/httpd.conf|
|andthenyoushouldbeabletoimmediatelyfireup|
|Apachethefirsttimebyrunning:
|
||
|/usr/local/apache/bin/apachectlstart|
|OrwhenyouwanttorunitwithSSLenableduse:
|
||
|/usr/local/apache/bin/apachectlstartssl|
|ThanksforusingApache.TheApacheGroup|
|http:
//www.apache.org/|
+----------------------------------------------------------------------------------+
现在验证Apache和PHP是否正在工作。
然而,我们需要编辑srm.conf和httpd.conf保证我们把PHP类型加到了配置中。
查看httpd.conf并去掉下列行的注释。
如果你精确地遵循了本文的指令,你的httpd.conf文件将位于/usr/local/apache/conf目录。
文件有一行针对php4的addtype加了注释,现在就去掉注释。
httpd.conf文件--片断
>#AndforPHP4.x,use:
>#
--->AddTypeapplication/x-httpd-php.php
--->AddTypeapplication/x-httpd-php-source.phps
现在我们准备启动Apache服务器看它是否在工作。
首先我们将启动不支持SSL的服务器看它是否启动了。
我们将检查对PHP的支持,然后我们将停止服务器并且启动启用了SSL支持的服务器并检查我们是否一切正常。
configtest将检查所有配置是否正确设置。
#cd/usr/local/apache/bin
#./apachectlconfigtest
SyntaxOK
#./apachectlstart
./apachectlstart:
httpdstarted
//孤狼测试APACHE+PHP+MYSQL部分略
SSL选择正在工作吗?
?
好了,现在我们准备测试SSL了。
首先停止服务器,并以启用SSL的选项重启它。
#/usr/local/apache/bin/apachectlstop
#/usr/local/apache/bin/apachectlstartssl
测试它是否工作:
通过用一个Netscape与服务器连接并且选择https协议,即:
或:
443,也可以再试一下你的服务器的ip地址,即:
https:
//xxx.xxx.xxx.xxx和http:
//xxx.xxx.xxx.xxx:
443。
如果它起作用了,服务器将把证书发送到浏览器以建立一个安全连接。
这将让浏览器提示你接受自己签署的证书。
,如果它是来自VeriSign或Thawte的一张证书,那么浏览器将不提示你,因为证书来自一个可信的证书授权机构(CA)。
在我们的情况中,我们创建并签署我们自己的证书……我们不想马上买一个。
首先,我们想要保证我们能使一切正常。
注意,我们竟能在同一文件中同时有HTML和PHP命令。
这就是PHP脚本的奇妙之处。
SSL虚拟主机
创建SSL虚拟主机类似非SSL。
除了你需要指定另外的指令,还有,你需要增加一个DNS记录并且修改httpd.conf。
这里有一个例子。
#--------------------------------------------#
#SSLVirtualHostContext
#--------------------------------------------#
#Generalsetupforthevirtualhost
DocumentRoot/usr/local/apache/htdocs
ServerAdminwebmaster@
ServerName
ErrorLoglogs/-error_log
TransferLoglogs/-transfer_log
#SSLEngineSwitch:
#Enable/DisableSSLforthisvirtualhost.
SSLEngineon
#ServerCertificate:
#PointSSLCertificateFileataPEMencodedcertificate.If
#thecertificateisencrypted,thenyouwillbepromptedfora
#passphrase.Notethatakill-HUPwillpromptagain.Atest
#certificatecanbegeneratedwith`makecertificate'under
#builttime.Keepinmindthatifyou'vebothaRSAandaDSA
#certificateyoucanconfigurebothinparallel(toalsoallow
#theuseofDSAciphers,etc.)
#NotethatIkeepmycertificatefileslocatedinacentral
#location.YoucouldchangethisifyouareanISP,orASP.
SSLCertificateFile/usr/local/apache/conf/ssl.crt/server.crt
#ServerPrivateKey:
#Ifthekeyisnotcombinedwiththecertificate,usethis
#directivetopointatthekeyfile.Keepinmindthatif
#you'vebothaRSAandaDSAprivatekeyyoucanconfigure
#bothinparallel(toalsoallowtheuseofDSAciphers,etc.)
SSLCertificateKeyFile/usr/local/apache/conf/ssl.key/server.key
#Per-ServerLogging:
#ThehomeofacustomSSLlogfile.Usethiswhenyouwanta
#compactnon-errorSSLlogfileonavirtualhostbasis.
CustomLog/usr/local/apache/logs/ssl_request_log\
"%t%h%{SSL_PROTOCOL}x%{SSL_CIPHER}x\"%r\"%b"
记住你有很多指令可以指定。
我们将在另一篇有关配置Apache的文章中讨论,本文只是一个入门性指南。
生成证书
这是如何生成证书的按部就班的描述。
为你的Apache服务器创建一个RSA私用密钥(被Triple-DES加密并且进行PEM格式化):
#opensslgenrsa-des3-outserver.key1024
请在安全的地方备份这个server.key文件。
记住你输入的通行短语(passphrase)!
你可以通过下面的命令看到这个RSA私用密钥的细节。
#opensslrsa-noout-text-inserver.key
而且你可以为这个RSA私用密钥创建一个加密的PEM版本(不推荐),通过下列命令:
#opensslrsa-inserver.key-outserver.key.unsecure
用服务器RSA私用密钥生成一个证书签署请求(CSR-CertificateSigningRequest)(输出将是PEM格式的):
#opensslreq-new-keyserver.key-outserver.csr
当OpenSSL提示你“CommonName”时,确保你输入了服务器的FQDN("FullyQualifiedDomainName"),即,当你为一个以后用https:
//www.foo.dom/访问的网站生成一个CSR时,这里输入"www.foo.dom"。
你可借助下列命令查看该CSR的细节:
#opensslreq-noout-text-inserver.csr
将CSR发到一个CA
现在你必须发送该CSR到一个CA以便签署,然后的结果才是可以用于Apache的一个真正的证书。
有两种选择:
第一种,你可以通过一个商业性CA如Verisign或Thawte签署证书。
那么你通常要将CSR贴入一个web表格,支付签署费用并等待签署的证书,然后你可以把它存在一个server.crt文件中。
关于商业性CA的更多信息,请参见下列链接:
Verisign-http:
//digitalid.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- linux ssl php 环境 配置