openssl自建根憑證SSL+Apache

來源:互聯網
上載者:User

首先在安裝之前要明白一些基本概念

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:[Copy to clipboard]#rpm –e –-nodeps openssl
3、解壓:

CODE:[Copy to clipboard]#tar xzvf openssl-0.9.7e.tar.gz
4、進入openssl目錄,並安裝,用--prefix指定openssl安裝目錄

CODE:[Copy to clipboard]#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:[Copy to clipboard]#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:[Copy to clipboard][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:[Copy to clipboard][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:[Copy to clipboard][root@win ssl.crt]# openssl genrsa -des3 -out server.key 1024
產生伺服器憑證請求

CODE:[Copy to clipboard][root@win ssl.crt]# openssl req -new -key server.key -out server.csr
會要求輸入資訊

CODE:[Copy to clipboard]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:[Copy to clipboard][root@win ssl.crt]# mv server.csr newreq.pem
[root@win ssl.crt]# ./CA.sh -sign
這樣就產生了server的認證newcert.pem
把newcert.pem改名成server.crt

CODE:[Copy to clipboard][root@win ssl.crt]# mv newcert.pem server.crt
4、處理用戶端:
產生客戶私密金鑰:

CODE:[Copy to clipboard][root@win ssl.crt]# openssl genrsa -des3 -out client.key 1024
請求

CODE:[Copy to clipboard][root@win ssl.crt]# openssl req -new -key client.key -out client.csr
簽證:

CODE:[Copy to clipboard][root@win ssl.crt]# openssl ca -in client.csr -out client.crt
把認證格式轉換成pkcs12格式

CODE:[Copy to clipboard][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:[Copy to clipboard]#cp demoCA/cacert.pem cacert.pem
同時複製一份認證,更名為ca.crt

CODE:[Copy to clipboard]#cp cacert.pem ca.crt
步驟三、編輯ssl.conf

CODE:[Copy to clipboard]#cd /usr/local/apache/conf
編輯ssl.conf

CODE:[Copy to clipboard]指定伺服器憑證位置
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:[Copy to clipboard]/usr/local/apache/bin/apachectl startssl
會要求輸入server.key的密碼
啟動,這樣一個預設的SSL伺服器及http伺服器就啟動了,

步驟四、安裝和使用認證
把剛才產生的認證:根憑證ca.crt和客戶認證client.pfx下到用戶端,並安裝,
ca.crt安裝到信任的機構,client.pfx直接在windows安裝或安裝到個人認證位置,然後用IP訪問HTTP和https伺服器。  

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.