2016年11月22日 星期二

建立linux apache server 憑證

建立linux apache server 憑證的過程可以分為幾個部份:

一、 建立自己的憑證中心(CA)
二、 web server 向憑證中心(CA) 發送簽署需求,取得憑證
三、 放置憑證
四、 瀏覽器安裝憑證中心(CA)的憑證

一、 建立自己的憑證中心(CA)

一般對外開放的web server會向具有公信力的憑證中心(CA)或其下的憑證代發者申請憑證,但如果是測試網站或者在lan內部的網站,則無法這樣申請,因此要自己仿造憑證中心,並讓瀏覽器安裝此憑證中心的憑證。

憑證中心(CA)包含一個密鑰(key)及憑證(cer)。
key的生成:
mkdir -p /etc/pki/tls
cd /etc/pki/tls/ca
openssl genrsa -out ca.key.pem 2048
chmod 600 ca.key.pem
此時產生的 ca.key.pem 就是憑證中心(CA)的密鑰(key),並且它的格式是pem格式。
接著建立憑證中心(CA)的憑證(cer),先建立申請憑證的需求ca.csr
openssl req -new -key ca.key.pem -out ca.csr \
  -subj "/O=myca/OU=myca/CN=*.ca.net"
使用ca.csr向自己申請憑證
openssl x509 -req -days 3650 -sha256 \
  -extensions v3_ca -signkey ca.key.pem \
  -in ca.csr -out ca.cer.pem
openssl pkcs12 -export -cacerts -inkey ca.key.pem \
  -in ca.cer.pem -out ca.cer.p12 -passout pass:
ca.cer.pem就是憑證中心(CA)的憑證,格式為pem。
另外也產生了ca.cer.p12是格式為p12的憑證,可用於一般瀏覽器匯入用。
最後可以刪除掉不需要的ca.csr

二、 web server 向憑證中心(CA) 發送簽署需求,取得憑證

假設我們的server名稱為myserver,在此網域下為myserver.ca.net,
先建立server自己的密鑰(myserver.ca.net.key.pem)與申請憑證需求myserver.csr
openssl genrsa -out myserver.ca.net.key.pem 2048
openssl req -new -key myserver.ca.net.key.pem -out myserver.csr\
  -subj "/O=myserver/OU=myserver/CN=myserver.ca.net"
其中CN項目填寫的是要申請的domain name,必須與機器的名稱設定相同。
接著透過CA來簽署這個需求產生server的憑證(myserver.cer.pem)
openssl x509 -req -days 3650 \
  -sha256 -extensions v3_req -CA ca.cer.pem -CAkey ca.key.pem \
  -CAserial ca.srl -CAcreateserial -in myserver.csr \
  -out myserver.ca.net.cer.pem
取得server的憑證(myserver.ca.net.cer.pem)後,可以刪除需求檔myserver.csr
PS:需要特別注意,chrome已經認定sha1不安全,因此憑證的簽署可使用sha256

三、 放置憑證

將產生的憑證檔放置在安全(外部無法讀取)的地方,例如 /etc/pki/tls/,
然後設定apache的/etc/httpds/ssl.conf
SSLCertificateFile /etc/pki/tls/myserver.ca.net.cer.pem
SSLCertificateKeyFile /etc/pki/tls/myserver.ca.net.key.pem
接著記得重起apache:service httpd restart

四、 瀏覽器安裝憑證中心(CA)的憑證

將ca.cer.p12下載到需要連線到此server的client,然後安裝在瀏覽器的憑證上面就可以了。
例如chrome可以從設定的 HTTPS/SSL 憑證管理中,增加"信任的根憑證授權"來增加。

沒有留言:

張貼留言