apache添加ssl協議實現用戶認證


目標

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:443IP必須與證書上的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

 

注意事項:安裝后配置文件格式為cnfWin 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.keycb.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.keyserver1.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目錄下原來的舊文件。否則被吊銷的證書依然是可用的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM