目標
1對服務器的訪問由http改為https,
2僅有證書的客戶端可以訪問服務器,
3.通過服務器端的配置,可以停用某個客戶端的證書。
一 Apache服務器相關配置:
在../apache/conf/httpd.conf中,
1.關閉80端口,禁止通過http訪問服務器,在Listen 80之前加上’#’,修改后如下:紅色字體為修改之后的。
#Listen 0.0.0.0:80
#Listen [::]:80
#Listen 80
2.加載ssl模塊,去掉之前的’#’,修改后如下:
LoadModule ssl_module modules/mod_ssl.so
LoadModule status_module modules/mod_status.so
3.包括ssl模塊的配置文件
# Secure (SSL/TLS) connections
Include "conf/extra/httpd-ssl.conf"
4服務器目錄訪問權限設置;
htdocs目錄訪問限制。
<Directory "C:/xampplite/htdocs">
#
# Possible values for the Options directive are "None", "All",
# or any combination of:
# Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
#
# Note that "MultiViews" must be named *explicitly* --- "Options All"
# doesn't give it to you.
#
# The Options directive is both complicated and important. Please see
# http://httpd.apache.org/docs/2.2/mod/core.html#options
# for more information.
#
Options Indexes FollowSymLinks Includes ExecCGI
#
# AllowOverride controls what directives may be placed in .htaccess files.
# It can be "All", "None", or any combination of the keywords:
# Options FileInfo AuthConfig Limit
#
AllowOverride All
#
# Controls who can get stuff from this server.
#
Order allow,deny
#Deny from all
Allow from all
</Directory>
服務器根目錄訪問限制
#
# Each directory to which Apache has access can be configured with respect
# to which services and features are allowed and/or disabled in that
# directory (and its subdirectories).
#
# First, we configure the "default" to be a very restrictive set of
# features.
#
<Directory />
Options FollowSymLinks
AllowOverride None
Order deny,allow
#Deny from all
allow from all
</Directory>
在../apache/conf/extra/httpd-ssl.conf中
1.啟用https訪問,去掉#Listen 443之前的‘#’,修改后如下:
#Listen 0.0.0.0:443
#Listen [::]:443
Listen 443
2.配置服務器名:ServerName 如果基於IP訪問填寫如192.168.48.136:443,IP必須與證書上的commonName一致,否則訪問時回彈出警告。
<VirtualHost _default_:443>
# General setup for the virtual host
DocumentRoot "C:/xampplite/htdocs"
ServerName l92.168.48.136:443
ServerAdmin webmaster@localhost
ErrorLog "logs/error.log"
<IfModule log_config_module>
CustomLog "logs/access.log" combined
</IfModule>
3.服務器證書相關配置:(具體證書文件名根據自己后面制作生成的而定)
SSLCertificateFile "conf/ssl.crt/server.crt" 服務器證書文件
SSLCertificateKeyFile "conf/ssl.key/server1.key" 服務器私鑰文件
SSLCACertificateFile "conf/ssl.crt/ca.crt" ca證書文件
SSLCARevocationPath "conf/ssl.crl" 證書吊銷列表路徑
SSLCARevocationFile "conf/ssl.crl/client.crl" 證書吊銷列表文件
4.用戶認證配置修改如下:
# Client Authentication (Type):
# Client certificate verification type and depth. Types are
# none, optional, require and optional_no_ca. Depth is a
# number which specifies how deeply to verify the certificate
# issuer chain before deciding the certificate is not valid.
SSLVerifyClient require
SSLVerifyDepth 1
二 Openssl安裝配置
1.安裝xampp后里面自帶了openssl模塊。由於openssl是使用時需要調用C庫函數,因此確認電腦上安裝了,vc++6.0或者visual studio 2008.如果是在win xp下安裝,xampp里面包含的php版本必須是v5.4或之前的.
路徑:../apache/bin/openssl.conf
2.Openssl的配置,配置證書生成的文件的存儲路徑。
dir = c:/ca # Where everything is kept
3.申請證書時,需要填寫證書信息,如果多次申請證書,這些證書的大部分信息相同(如果國家、城市等),可配置默認值,使用默認值是回車跳過就可以了,以下是我配置的例子:
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = BeiJing
localityName = BeiJing (eg, city)
0.organizationName = companyName(eg, company)
0.organizationName_default = companyName
# we can do this but it is not needed normally :-)
#1.organizationName = Second Organization Name (eg, company)
#1.organizationName_default = World Wide Web Pty Ltd
organizationalUnitName = t3 (eg, section)
#organizationalUnitName_default =
commonName = Common Name (eg, YOUR name)
commonName_max = 64
emailAddress = XXX@xx.com
emailAddress_max = 64
# SET-ex3 = SET extension number 3
[ req_attributes ]
challengePassword = A challenge password
challengePassword_min = 4
challengePassword_max = 20
unstructuredName = An optional company name
注意事項:安裝后配置文件格式為cnf,Win xp下因為無法正確識別文件而打不開,
解決辦法:將此openssl.cnf文件(誤識別為快速撥號文件)拖入到UltraEdit軟件圖標處打開,將文件另存為temp.conf格式,然后新建文件命名為openssl.conf,將temp.conf右鍵用寫字板打開,全部復制到openssl.conf文件夾下,保存openssl.conf,然后將此文件放到../apache/bin目錄下。temp.conf可以刪除了.
三 生成CA證書的步驟:
1.生成CA證書的私鑰(.key)和證書申請文件(.csr);(ps:因為我之前生成過ca.key,和ca.csr,所以這次就用cb.key和cb.csr,不過文件名無所謂)
2輸入證書私鑰保護密碼:
私鑰保護密碼一定要牢記,利用用到證書私鑰的地方必須輸入私鑰保護密碼。
輸入證書申請文件相關的信息:主要填寫國家、省份、城市、公司名、部門、Common name(用戶名)(此項必須手動輸入,這是證書身份區別靠這項)、郵箱隨便填、challenge password是什么不知道,之后沒用到過,不過還是記住為好,最后一項備選公司名隨便填了。如果以后證書申請文件的內容大部分相同,可以直接在openssl.conf配置文件中修改,進行默認配置,
3.使用根證書私鑰對根證書私鑰進行自簽名
輸入根證書私鑰保護密碼:
5接着連續輸入y,確認
四 服務器端證書生成步驟:
1.生成服務器證書的私鑰(.key)和證書申請文件(.csr);
輸入證書申請文件相關信息:注意:如果服務器是基於域名訪問,common name輸入域名,如果基於IP地址訪問,common name輸入服務器對應的IP地址
2.用生成的CA證書給服務器證書簽名。(ps:后面沒有截取到的命令是 “.\openssl.conf”)
輸入CA證書的私鑰保護密碼:
接下來連續輸入y確認
3.如果apache是安裝在linux下,跳過這一步,如果安裝在windows環境下,則不能給CA私鑰和服務器私鑰設置保護密碼,否則服務器無法啟動,需要去掉密碼,去掉CA私鑰保護密碼用如下命令:
去掉服務器密碼,只需修改cb.key為server1.key.即可
然后將\ca\certs目錄下的服務器證書和CA證書,拷貝到apache的..\apache\ssl.crt目錄
將\ca\csr目錄下的服務器證書申請文件server1.csr,拷貝到apache的..\apache\ssl.csr目錄
將\ca\keys目錄下的服務器私鑰文件server..key,拷貝到apache的..\apache\ssl.key目錄
五 客戶端證書生成步驟:
1.生成客戶端的私鑰.key和證書申請文件.csr
2.輸入私鑰保護密碼:
私鑰保護密碼必須牢記!!
3輸入證書申請文件相關的信息:
4.使用根證書對個人證書進行簽名:(ps:后面沒有截取到的命令是 “.\openssl.conf”)
需要輸入CA證書的私鑰保護密碼,后面的連續輸入y
5.將客戶端證書文件(公鑰和用戶信息)和私鑰合並成pfx格式。
輸入client2的私鑰保護密碼:
輸入導入證書的密碼並確認輸入:
將生成的client.pfx的個人證書和ca.crt證書安裝到PC瀏覽器或手機中。(ps:手機中安裝,如果出現格式不支持,請參考鏈接:http://www.cnblogs.com/dosboy/archive/2013/03/05/2943963.html)
六 吊銷證書:(即通過吊銷證書來限制某個客戶端對服務器的訪問權限)
1.查看\ca目錄下,打開index.txt文件,查看需要吊銷證書的信息,尤其是序列號。
例如:
V 150506074352Z 05 unknown /C=CN/ST=BeiJing/O=linekong/CN=client3
可以看到client3的證書序列號為:05 而且當前證書狀態是未吊銷(前面第一個字母是V表示未吊銷,吊銷后為R)
打開\ca\cert目錄后可以看到有個05.pem的文件。
2.通過這個命令查看將要吊銷的證書內部的詳細信息,進行最后確認。
3.輸入一下命令吊銷該證書
輸入ca的私鑰保護密碼:
可以看到證書已經吊銷:
4.更新證書吊銷文件列表
輸入ca證書私鑰保護密碼
可以看到證書吊銷列表多出05號的證書
5.將client.crl文件復制到服務器目錄下(我的是在..\apache\conf\ssl.crl目錄下),並修改..apache\conf\extra目錄下httpd-ssl.conf中的配置,修改后如下:
# Certificate Revocation Lists (CRL):
# Set the CA revocation path where to find CA CRLs for client
# authentication or alternatively one huge file containing all
# of them (file must be PEM encoded)
# Note: Inside SSLCARevocationPath you need hash symlinks
# to point to the certificate files. Use the provided
# Makefile to update the hash symlinks after changes.
SSLCARevocationPath "conf/ssl.crl"
SSLCARevocationFile "conf/ssl.crl/client.crl"
6.重啟服務器。
注意事項:如果以后還要吊銷其他由CA簽發的證書時,前3步根據被吊銷證書信息操作,第4步不變,因為由CA簽發的證書被吊銷后,統一都放在同一個證書吊銷列表文件中,(如本例中是:client.crl)證書吊銷列表文件更新后,需同時用最新的文件替換..\apache\conf\ssl.crl目錄下原來的舊文件。否則被吊銷的證書依然是可用的。