?雖然在安裝MOD_SSL時已經使用 make certificate 命令建立了服務器
的證書簽名,但是有時你可能需要改變它。
當然有很多自動的腳本可以實現它,但是最可靠的方法是手工簽署
證書。
首先我假定你已經安裝好了openssl和MOD_SSL,如果你的openssl安裝時
的prefix設置為/usr/local/openssl,那么把/usr/local/openssl/bin加入
執行文件查找路徑。還需要MOD_SSL源代碼中的一個腳本,它在MOD_SSL的
源代碼目錄樹下的pkg.contrib目錄中,文件名為 sign.sh。
將它拷貝到 /usr/local/openssl/bin 中。
先建立一個 CA 的證書,
首先為 CA 創建一個 RSA 私用密鑰,
[S-1]
openssl genrsa -des3 -out ca.key 1024
系統提示輸入 PEM pass phrase,也就是密碼,輸入后牢記它。
生成 ca.key 文件,將文件屬性改為400,并放在安全的地方。
[S-2]
chmod 400 ca.key
你可以用下列命令查看它的內容,
[S-3]
openssl rsa -noout -text -in ca.key
利用 CA 的 RSA 密鑰創建一個自簽署的 CA 證書(X.509結構)
[S-4]
openssl req -new -x509 -days 3650 -key ca.key -out ca.crt
然后需要輸入下列信息:
Country Name: cn 兩個字母的國家代號
State or Province Name: An Hui 省份名稱
Locality Name: Bengbu 城市名稱
Organization Name: Family Network 公司名稱
Organizational Unit Name: Home 部門名稱
Common Name: Chen Yang 你的姓名
Email Address: sunstorm@263.net Email地址
生成 ca.crt 文件,將文件屬性改為400,并放在安全的地方。
[S-5]
chmod 400 ca.crt
你可以用下列命令查看它的內容,
[S-6]
openssl x509 -noout -text -in ca.crt
下面要創建服務器證書簽署請求,
首先為你的 Apache 創建一個 RSA 私用密鑰:
[S-7]
openssl genrsa -des3 -out server.key 1024
這里也要設定pass phrase。
生成 server.key 文件,將文件屬性改為400,并放在安全的地方。
[S-8]
chmod 400 server.key
你可以用下列命令查看它的內容,
[S-9]
openssl rsa -noout -text -in server.key
用 server.key 生成證書簽署請求 CSR.
[S-10]
openssl req -new -key server.key -out server.csr
這里也要輸入一些信息,和[S-4]中的內容類似。
至于 'extra' attributes 不用輸入。
你可以查看 CSR 的細節
[S-11]
openssl req -noout -text -in server.csr
下面可以簽署證書了,需要用到腳本 sign.sh
[S-12]
sign.sh server.csr
就可以得到server.crt。
將文件屬性改為400,并放在安全的地方。
[S-13]
chmod 400 server.crt
刪除CSR
[S-14]
rm server.csr
最后apache設置
如果你的apache編譯參數prefix為/usr/local/apache,
那么拷貝server.crt 和 server.key 到 /usr/local/apache/conf
修改httpd.conf
將下面的參數改為:
SSLCertificateFILE /usr/local/apache/conf/server.crt
SSLCertificateKeyFile /usr/local/apache/conf/server.key
openssl自建證書SSL+apache
?本文章在LINUX9+apache2.0.52,tomcat5.5.6,j2se1.5,openssl0.97上實驗通證
本文的目的是為了交流,如有出錯的地方,請指教
轉載請注明出處,并保持文章的完整性
現在開始安裝
首先在安裝之前要明白一些基本概念
1、SSL所使用的證書可以是自己建的生成的,也可以通過一個商業性CA如Verisign 或 Thawte簽署證書。
2、證書的概念:首先要有一個根證書,然后用根證書來簽發服務器證書和客戶證書,一般理解:服務器證書和客戶證書是平級關系。在SSL必須安裝根證書和服務器證書來認證。
因此:在此環境中,至少必須有三個證書:即根證書,服務器證書,客戶端證書
在生成證書之前,一般會有一個私鑰,同時用私鑰生成證書請求,再利用證書服務器的根證來簽發證書。
3、簽發證書的問題:我最近找了很多關于openssl的資料,基本上只生成了根證書和私鑰及服務器證書請求,并沒有真正的實現簽證。我這里參考了一些資料,用openssl自帶的一個CA.sh來簽證書,而不是用MOD_ssl里的sign.sh來簽。
用openssl語法來生成證書,有很多條件限定,如目錄,key的位置等,比較麻煩,我實驗了好幾天,最后放棄了。有興趣的可以參考一下openssl手冊。
步驟一:安裝openssl和apache
1、到www.openssl.org下載openssl-0.9.7e.tar.gz(目前最新版)
2、卸載掉老的opensll庫
CODE: #rpm –e –-nodeps openssl |
3、解壓:
CODE: #tar xzvf openssl-0.9.7e.tar.gz |
4、進入openssl目錄,并安裝,用--prefix指定openssl安裝目錄
CODE: #cd openssl-0.9.7e #./config --prefix=/usr/local/openssl #make #make test #make install |
5、安裝apache
至www.apache.org/dist下載apache最新版httpd-2.0.52.tar.gz
解壓后進入apache目錄,根據需要安裝需要的模塊,我這里裝了ssl,rewrite,動態模式安裝
CODE: #tar zxvf httpd-2.0.52.tar.gz #cd httpd-2.0.52 #./configure --prefix=PREFIX --enable-ssl --enable-rewrite --enable-so --with-ssl=/usr/local/openssl #make #make install |
步驟二:簽證
安裝openssl后,在openssl下有一個CA.sh文件,就是利用此文件來簽證,
來簽三張證書,然后利用這三張證書來布SSL服務器。
1、在/usr/local/apache/conf下,建立一個ssl.crt目錄,將CA.sh文件copy至/usr/local/apache/conf/ssl.crt/目錄
CODE: [root@win ssl]# cp /usr/local/openssl/ssl/misc/CA.sh /usr/local/apache/conf/ssl.crt/CA.sh |
2、運行CA.sh -newca,他會找你要CA需要的一個CA自己的私有密鑰密碼文件。如果沒有這個文件?按回車會自動創建,輸入密碼來保護這個密碼文件。之后會要你的一個公司信息來做CA.crt文件。最后在當前目錄下多了一個./demoCA這樣的目錄../demoCA/private/cakey.pem就是CA 的key文件啦,./demoCA/cacert.pem就是CA的crt文件了
CODE: [root@win ssl.crt]# ./CA.sh -newca |
要求輸入如下信息:
QUOTE: |
Country Name (2 letter code) [GB]:CN State or Province Name (full name) [Berkshire]:FUJIAN Locality Name (eg, city) [Newbury]:FUZHOU Organization Name (eg, company) [My Company Ltd]:FJJM Organizational Unit Name (eg, section) []:FD Common Name (eg, your name or your server's hostname) []:WIN Email Address []:WIN@WIN.COM |
這樣就建好了一個CA服務器,有了一個根證書的私鑰cakey.pem及一張根證書cacert.pem,現在就可以cacert.pem來給簽證了
3、簽署服務器證書
生成服務器私鑰:
CODE: [root@win ssl.crt]# openssl genrsa -des3 -out server.key 1024 |
生成服務器證書請求
CODE: [root@win ssl.crt]# openssl req -new -key server.key -out server.csr |
會要求輸入信息
CODE: Country Name (2 letter code) [GB]:CN State or Province Name (full name) [Berkshire]:FUJIAN Locality Name (eg, city) [Newbury]:FUZHOU Organization Name (eg, company) [My Company Ltd]:FJJM Organizational Unit Name (eg, section) []:FD Common Name (eg, your name or your server's hostname) []:WIN Email Address []:WIN@WIN.COM Please enter the following 'extra' attributes to be sent with your certificate request A challenge password []:WIN An optional company name []:WING |
最后把server.crt文件mv成newreq.pem,然后用CA.sh來簽證就可以了
CODE: [root@win ssl.crt]# mv server.csr newreq.pem [root@win ssl.crt]# ./CA.sh -sign |
這樣就生成了server的證書newcert.pem
把newcert.pem改名成server.crt
CODE: [root@win ssl.crt]# mv newcert.pem server.crt |
4、處理客戶端:
生成客戶私鑰:
CODE: [root@win ssl.crt]# openssl genrsa -des3 -out client.key 1024 |
請求
CODE: [root@win ssl.crt]# openssl req -new -key client.key -out client.csr |
簽證:
CODE: [root@win ssl.crt]# openssl ca -in client.csr -out client.crt |
把證書格式轉換成pkcs12格式
CODE: [root@win ssl.crt]# openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx |
5、這時就有了三張證書和三個私鑰,一個是demoCA下的根證書,ssl.crt下的服務器證書和客戶證書。及demoCA/private下的根key, ssl.crt下的服務器key和客戶key,在conf下的ssl.conf下指定證書的位置和服務器key的位置.
我是在conf下建立一個ssl.crt目錄,并將所有的key和證書放到這里
CODE: #cp demoCA/cacert.pem cacert.pem |
同時復制一份證書,更名為ca.crt
CODE: #cp cacert.pem ca.crt |
步驟三、編輯ssl.conf
CODE: #cd /usr/local/apache/conf |
編輯ssl.conf
CODE: 指定服務器證書位置 SSLCertificateFile /usr/local/apache/conf/ssl.crt/server.crt 指定服務器證書key位置 SSLCertificateKeyFile /usr/local/apache/conf/ssl.crt/server.key 證書目錄 SSLCACertificatePath /usr/local/apache/conf/ssl.crt 根證書位置 SSLCACertificateFile /usr/local/apache/conf/ssl.crt/cacert.pem 開啟客戶端SSL請求 SSLVerifyClient require SSLVerifyDepth 1 |
啟動ssl
CODE: /usr/local/apache/bin/apachectl startssl |
會要求輸入server.key的密碼
啟動,這樣一個默認的SSL服務器及http服務器就啟動了,
步驟四、安裝和使用證書
把剛才生成的證書:根證書ca.crt和客戶證書client.pfx下到客戶端,并安裝,
ca.crt安裝到信任的機構,client.pfx直接在windows安裝或安裝到個人證書位置,然后用IP訪問HTTP和https服務器。