Apache 2.2-SSL操做大全



製做CSR申請文件
 
製做Apache下使用的CSR請求文件,最簡單的辦法就直接使用咱們的 OpenSSL CSR在線生成器: https://www.myssl.cn/openssl/createcsr.asp
(注意:您必須同時保存server.key和server.csr文件)
 
Apache 2.2 SSL主要採用BASE64位的PEM文件格式,能夠採用Openssl命令行工具來生成CSR文件,OpenSSL工具是免費的,能夠從www.openssl.org下載到最新的源碼,但須要本身編譯(見Openssl編譯簡介),你也能夠下載使用已經編譯好的OpenSSL 0.9.8.a for win32,下載地址是: http://www.myssl.cn/download/OpenSSL_0.9.8.a_Win32.zip 
編輯器

一、Openssl是一個命令行工具,首先將下載包解壓到C:\openssl下。

二、打開DOS命令行窗口,進入C:\openssl,輸入命令:
openssl req -new -nodes -keyout server.key -out server.csr 

Loading 'screen' into random state - done
Generating a 1024 bit RSA private key
...........................++++++
....................................++++++
writing new private key to 'server.key'
-----
You are about to be asked to enter information that will be 
incorporated into your certificate request.
What you are about to enter is what is called a
Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Shanghai
Locality Name (eg, city) []:Shanghai
Organization Name (eg, company) [Internet Widgits Ltd]:
Shanghai Fastcom Technology Co.,Ltd.
Organizational Unit Name (eg, section) []:IT Dept.
Common Name (eg, YOUR name) []:www.myssl.cn
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:

三、在完成了如上的交互信息輸入後,當前目錄下將產生兩個文件:server.key 和 server.csr。請妥善保存這兩個文件,請不要泄露server.key私鑰文件。

四、在這一命令執行的過程當中,系統會要求您填寫以下信息:
 

Country Name (2 letter code) 使用國際標準組織(ISO)國碼格式,填寫2個字母的國家代號。中國請填寫CN。
State or Province Name (full name) 省份,好比填寫Shanghai
Locality Name (eg, city) 城市,好比填寫Shanghai 
Organization Name (eg, company) 組織單位,好比填寫公司名稱的拼音
Organizational Unit Name (eg, section) 好比填寫IT Dept
Common Name (eg, your websites domain name): 行使 SSL 加密的網站地址。請注意這裏並非單指您的域名,而是直接使用 SSL 的網站名稱 例如:pay.abc.com。 一個網站這裏定義是: 
abc.com 是一個網站; 
www.abc.com 是另一個網站; 
pay.abc.com 又是另一個網站。 
Email Address 郵件地址,能夠不填
A challenge password 能夠不填
An optional company name 能夠不填

五、如何產生2048位的密鑰對?

在上面的命令行交互中,咱們看到「Generating a 1024 bit RSA private key」,即系統缺省採用1024位的RSA密鑰長度,通常來講1024位是足夠的,可是在申請EV證書的時候,咱們必須採用2048位的密鑰長度,要生成2048位的密鑰,能夠修改上面的命令行:(斜體部分爲增長的參數)
openssl req -new -nodes -newkey rsa:2048 -keyout server.key -out server.csr 

六、如何製做中文的CSR文件?

中文CSR文件,主要指企業名稱、部門,城市,省份等信息採用中文,通用名和國家代碼仍然必須是英文的,GeoTrust目前已經全面支持中文的CSR,要製做中文的CSR,最簡單的辦法仍然是採用咱們的在線CSR生成器: https://www.myssl.cn/openssl/createcsr.asp

若是但願本身經過Openssl工具來製做中文CSR就須要多費一些工夫了,下面詳細介紹一下采用Openssl命令行製做中文CSR的方法。
Openssl自己是能夠支持UTF-8編碼來支持中文的,可是若是經過DOS命令行是沒法輸入UTF-8的中文字符的,因此咱們必須採用Opnessl.cnf配置文件的缺省值來實現中文字的輸入。採用一個文本編輯器,最好是支持utf-8字符的,我採用UltraEdit,打開Openssl.cnf文件,首先修改:

string_mask = utf8only

這句話將強制字符的輸入採用UTF-8的編碼格式,而後修改缺省DN信息,錄入咱們須要閤中文字符,以下 

commonName_default		= www.myssl.cn
organizationName_default	= 上海迅通科技有限公司
organizationalUnitName_default	= IT 部門
stateOrProvinceName_default	= 上海
localityName_default		= 上海
countryName_default		= CN

而後將文件按utf-8,no bom的編碼格式保存,在Ultraedit下,請選擇「另存爲」,格式爲「UTF-8 - NO-BOM」。若是沒有能夠支持UTF-8的編輯工具,也能夠下載一個ICONV來作編碼轉換工做。

準備好openss.cnf文件後,輸入命令行:
openssl req -utf8 -config config.cnf -new -nodes -batch -keyout server.key -out server.csr 
系統將自動生成CSR文件,保存在server.csr中。

CSR已經作好,最後強調,必須同時保存好server.csr和server.key2個文件,尤爲是server.key必定丟失,將沒法再使用這個證書。



安裝證書文件

一、將證書內容存爲一個文件:

您會收到一封來自迅通誠信的郵件,證書內容附在郵件中。若是證書是以附件的形式(Cert.cer)夾帶在郵件中,您就能夠直接應用它。若是您的證書中以文本的方式存在郵件中,您就須要將郵件中的證書部分的內容用Vi或Notepad存成一個純文本文件。不要將其存成Microsoft Word 或其它字處理軟件格式,並肯定證書內容中不含有空行和空格,文件名能夠爲server.cer。以下所示:


將保存好的server.cer文件和製做CSR時候生成的server.key一塊兒複製到服務器上。

二、修改httpd.conf文件。

Apache通常有2個版本下載,一個是帶SSL模塊的,一個是不帶SSL的,請首先檢查本身的SSL是包含了SSL模塊的,不然就無法作了。Apache的參數配置都在httpd.conf文件中,SSL配置也是如此,此外還能夠經過include httpd-ssl.conf來包含一個專門配置SSL的配置文件,若是激活了httpd-include ssl.conf,則能夠打開httpd-ssl.conf來配置相應參數。

通常,咱們直接在httpd.conf文件中直接配置SSL參數:

#加載模塊mod_ssl.so,此模塊是啓用SSL功能必須的。
LoadModule ssl_module modules/mod_ssl.so

#監聽443端口
Listen 443

#創建一個SSL的虛擬站點,避免SSL配置影響原來HTTP的站點配置。
<VirtualHost _default_:443>
DocumentRoot "C:/Program Files/Apache2/htdocs"
ServerName www.myssl.cn:443
SSLEngine on
SSLCertificateFile "C:/SSL/server.cer"
SSLCertificateKeyFile "C:/SSL/server.key"
SSLCertificateChainFile "C:/SSL/chain.cer"
ErrorLog "C:/Program Files/Apache2/logs/error.log"
TransferLog "C:/Program Files/Apache2/logs/access.log"
</VirtualHost>

#說明主站是使用HTTP通訊的,只有上面虛擬站點有SSL
SSLEngine off                               

配置參數說明以下(完整的SSL配置參數見這裏):

三、從新啓動Apache,若是是在Linux下,輸入:
apachectl stop
apachectl startssl



客戶端證書認證

一、基本客戶證書認證 

強制客戶對整個站點都必須採用客戶證書認證的方式,能夠在原來的配置下增長以下參數:

<VirtualHost _default_:443>
......
......
......
# 須要客戶有一個客戶端證書,並由ca.cer這個CA證書籤署
SSLVerifyClient require
SSLVerifyDepth 1
SSLCACertificateFile conf/ssl.crt/ca.cer 
</VirtualHost>

二、若是隻要求對特定目錄採用客戶證書認證方式,其餘目錄都不須要客戶端證書,則能夠採用以下配置:

<VirtualHost _default_:443>
......
......
......
# 須要客戶有一個客戶端證書,並由ca.cer這個CA證書籤署
SSLVerifyClient none
SSLCACertificateFile conf/ssl.crt/ca.crt
<Location /secure/area>
SSLVerifyClient require
SSLVerifyDepth 1
</Location>
</VirtualHost>


強制HTTPS訪問

強制HTTPS訪問,主要經過將用戶訪問的HTTP請求自動轉換爲HTTPS請求,有兩種方式:一種是經過編程的方式,詳見:"強制用戶經過SSL訪問網站" ;另外一種方式則是經過Apache強大的Rewrite功能。

若是要針對整個網站所有執行HTTP自動轉爲HTTPS的功能,能夠在httpd.conf文件中,增長:

RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}$1 [L,R]

若是,僅要求對\secure目錄下的內容強制採用HTTPS訪問,能夠在httpd.conf文件中加入以下語句:

<Directory "C:\Program Files\htdocs\secure">
RewriteEngine on
RewriteCond   %{HTTPS} !=on
RewriteRule   ^(.*)  https://%{SERVER_NAME}/secure/$1 [L,R]
</Directory>


訪問控制舉例

如何對來自Internet並要訪問Intranet的客戶強制採用強加密的HTTPS通訊,並採用基本或者客戶證書的認證方式?同時還要確保來自Intranet的客戶能夠進行HTTP訪問?

假設IntranetIP地址段是192.160.1.0/24,Intranet站點子區域的URL是/subarea ,則能夠在HTTPS虛擬主機站點之外增長以下配置(這樣能夠同時做用於HTTPS和HTTP):

SSLCACertificateFile conf/ssl.crt/company-ca.crt

<Directory /usr/local/apache2/htdocs>
# subarea之外的區域只容許來自Intranet的訪問
Order                deny,allow
Deny                 from all
Allow                from 192.168.1.0/24
</Directory>

<Directory /usr/local/apache2/htdocs/subarea>
# 在subarea之內,容許全部來自Intranet的訪問,
# 但對來自Internet的訪問,僅容許HTTPS+Strong-Cipher+Password
# 或者HTTPS+Strong-Cipher+Client-Certificate

# 若是使用了HTTPS,則確保使用高強度加密
# 同時容許客戶以基本認證的形式認證
SSLVerifyClient      optional
SSLVerifyDepth       1
SSLOptions           +FakeBasicAuth +StrictRequire
SSLRequire           %{SSL_CIPHER_USEKEYSIZE} >= 128

# 強制來自Internet的客戶使用HTTPS
RewriteEngine        on
RewriteCond          %{REMOTE_ADDR} !^192\.168\.1\.[0-9]+$
RewriteCond          %{HTTPS} !=on
RewriteRule          ^(.*)  https://%{SERVER_NAME}$1 [L,R]

# 容許網絡訪問和基本認證
Satisfy              any

# 控制網絡訪問
Order                deny,allow
Deny                 from all
Allow                192.168.1.0/24

# HTTP基本認證
AuthType             basic
AuthName             "Protected Intranet Area"
AuthBasicProvider    file
AuthUserFile         conf/protected.passwd
Require              valid-user
</Directory>


證書的備份(導出)

在Apache下的證書備份是很是簡單的,打開httpd.conf文件,找到SSLCertificateFile和SSLCertificateKeyFile指定的2個文件,一般是.cer(.crt)和.key文件,將這兩個文件複製到備份媒質上便可。



證書的恢復(導入)

要恢復Apache的證書一樣很是簡單,將備份的.cer和.key文件,複製到新的服務器上,而後參考上面服務器證書安裝說明,修改httpd.conf文件便可。



通配符和多域名證書在虛擬主機上的部署

若是要在一個IP地址上部署多個SSL網站,一種辦法就是給每一個網站分配不一樣的端口號,但這給用戶使用帶來不少麻煩。若是要在同一個IP地址的443端口上部署多個SSL網站,必須保證這些網站的域名都能匹配相同的一張SSL證書。這是由於SSL握手過程是經過IP+Port來進行通訊,一個IP的443端口只能返給客戶一張SSL證書(即便配置了多張證書,也只能返回第一張,由於用戶請求信息中,只有看到IP地址,沒法區分用戶須要哪一個證書),若是這張證書可以知足這些網站的主機名匹配要求,就可使用。

通常能匹配多個主機名的證書有通配符證書*.domain.com和多域名證書(www.domain.com,ftp.domain.com等),如下咱們提供一個典型同一個IP上的多主機名部署配置,www.domain.com對應的根目錄在WWW下,ftp.domain.com對應的根目錄在FTP下

NameVirtualHost 11.22.33.44:443

<VirtualHost 11.22.33.44:443>
DocumentRoot "C:/Apache2.2/htdocs/www"
ServerName www.domain.com
SSLEngine on
SSLCertificateFile "C:/Apache2.2/conf/server.cer"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
SSLCertificateChainFile "C:/Apache2.2/conf/chain.cer"
</VirtualHost>

<VirtualHost 11.22.33.44:443>
DocumentRoot "C:/Apache2.2/htdocs/ftp"
ServerName ftp.domain.com
SSLEngine on
SSLCertificateFile "C:/Apache2.2/conf/server.cer"
SSLCertificateKeyFile "C:/Apache2.2/conf/server.key"
</VirtualHost>


Openssl編譯簡介

一、Openssl是開源的,能夠到http://www.openssl.org/source/下載最新的版本。而後解壓到c:\openssl。

二、要編譯Openssl,須要下載並安裝ActivePerl,並在系統路徑中添加「C:\Perl\site\bin;C:\Perl\bin」

三、安裝Vs2003(也能夠安裝VS2005,2008但這2個版本的VC編譯出來的Openssl是有BUG的,在特定狀況下會產生win32異常錯誤,僅適合偶爾用一下的狀況)。

四、使用VS2003下的Visual Studio.net 2003 Command Prompt進入控制檯模式(這個模式會自動設置各類環境變量)

五、進入c:\openssl。

六、輸入(注意大小寫): perl Configure VC-WIN32 

七、輸入: ms\do_ms 

八、輸入: nmake -f ms\ntdll.mak 

九、Openssl已經編譯好了,執行程序在out32dll目錄下。

相關文章
相關標籤/搜索