隨筆-69  評論-0  文章-5  trackbacks-0
          Apache安裝MOD_SSL的補充--手工簽署證書的方法

          ?雖然在安裝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服務器。
          posted on 2006-11-29 15:47 liunix 閱讀(322) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 乌兰浩特市| 黄浦区| 印江| 安阳县| 怀宁县| 广西| 阳东县| 丰原市| 息烽县| 鸡西市| 盐源县| 和静县| 余姚市| 新安县| 石渠县| 黔江区| 鹤庆县| 天水市| 留坝县| 沙雅县| 元朗区| 仁化县| 建阳市| 三江| 营山县| 滨州市| 杨浦区| 甘泉县| 济南市| 革吉县| 平度市| 屏东县| 盱眙县| 井研县| 饶河县| 乐昌市| 新龙县| 稷山县| 宁国市| 五华县| 荔波县|