製做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配置參數見這裏):
Listen 443:
SSL協議監聽的端口,同下面Virtualhost 中的端口須要匹配,SSL協議缺省使用443端口,也有使用8443的狀況。
SSLEngine on:
SSL功能打開,若是在Virtualhost出現這句,則僅做用於虛擬機站點配置範圍,這個虛擬機站點所有使用SSL通訊,若是出如今Virtualhost外,則做用於全局,整個服務器都使用SSL(HTTPS)通訊,不能採用HTTP通訊,因此一般都在Virtualhost中加這句。
SSLCertificateFile:
證書文件,server.cer
SSLCertificateKeyFile
私鑰文件,server.key
SSLCertificateChainFile
中間鏈證書,請根據產品下載中間鏈證書,並保存爲'chain.cer'
Errorlog,TranksferLog:
日誌文件
SSLEngine off:
整個站點,除了虛擬站點外,關閉SSL,仍然支持HTTP通訊。
三、從新啓動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訪問,主要經過將用戶訪問的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是開源的,能夠到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目錄下。