Linux下Apache https認證

來源:互聯網
上載者:User

標籤:des   style   blog   http   io   color   ar   os   使用   

參考:http://kyfxbl.iteye.com/blog/1910891 http://showerlee.blog.51cto.com/2047005/1266712

一、環境
httpd:Apache2.4.10
openssl:1.0.1
OS:CentOS5.7

四、在httpd中配置單向HTTPS
1、編輯 httpd.conf,分別尋找下面2行代碼,並去掉前面的#,(這裡的前提是,在編譯httpd的時候,已經編譯了ssl模組)

vim /usr/local/apache/conf/httpd.confLoadModule socache_shmcb_module modules/mod_socache_shmcb.so  LoadModule socache_dbm_module modules/mod_socache_dbm.so  LoadModule socache_memcache_module modules/mod_socache_memcache.so  LoadModule ssl_module modules/mod_ssl.soInclude conf/extra/httpd-ssl.conf <IfModule ssl_module>  SSLRandomSeed startup builtin  SSLRandomSeed connect builtin  </IfModule> 

2、vim /usr/local/apache/conf/extra/httpd-ssl.conf 

SSLEngine on  SSLCertificateFile "/usr/local/httpd/conf/server.cer"  SSLCertificateKeyFile "/usr/local/httpd/conf/server.key.pem" 
#SSLCACertificateFile "/usr/local/httpd/conf/ca.cer" #SSLVerifyClient require #SSLVerifyDepth 10

只要開啟前3個,單向的HTTPS認證就配置好了。後面3個目前先注釋掉,是後面雙向認證才用到,然後重啟一下httpd,會發現報錯:

AH00526: Syntax error on line 106 of /usr/local/httpd/conf/extra/httpd-ssl.conf:
SSLCertificateFile: file ‘/usr/local/httpd/conf/server.cer‘ does not exist or is empty

這是因為httpd需要一個服務端的私密金鑰(.key.pem),和一個服務端認證(.cer)。前面已經配置了這2個檔案的路徑,但是還沒有建立。下一步就要建立這些檔案

五、建立CA(Certificate Authority)
1、準備工作
在/usr/local/下建立以下幾個子目錄: /private ,/certificates

2、建立CA私密金鑰

openssl genrsa -aes256 -out private/ca.key.pem 2048輸入密碼:111111    (密碼可以為空白)或者 命令內建密碼( -passout pass:111111 )openssl genrsa -aes256 -passout pass:111111 -out private/ca.key.pem 2048

3、建立CA簽章要求

openssl req -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=*.pldsec.com"
此處斷行符號之後是需要輸入上面的ca私密金鑰密碼的,後面一定要加上雙引號或者( -passin pass:111111 )openssl req -passin pass:111111 -new -key private/ca.key.pem -out private/ca.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=*.pldsec.com"

這裡要注意的是,如果不用-subj參數,那麼就會在命令列互動輸入簽發目標的身份識別資訊,這叫DN(Distinguished Name)。其中別的都不要緊,最重要的是CN那一行,因為我這裡是根憑證,所以我設定為*.pldsec.com,這樣我後面用這個CA簽發的www.pldsec.com、game.pldsec.com、news.pldsec.com……,全都是有效

4、自己簽發CA根憑證

openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer或者( -passin pass:111111)openssl x509 -req -days 3650 -sha1 -extensions v3_ca -signkey private/ca.key.pem -in private/ca.csr -out certificates/ca.cer -passin pass:111111

5、把根憑證從PEM編碼轉為PKCS編碼

openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12或者(-passin pass:111111 -passout pass:111111) 
openssl pkcs12 -export -cacerts -inkey private/ca.key.pem -in certificates/ca.cer -out certificates/ca.p12 -passin pass:111111 -passout pass:111111(先驗證原有密碼,在重新設定新密碼,新密碼和舊密碼可以相同,也可以不同)

六、簽發服務端認證
1、建立服務端私密金鑰

openssl genrsa -aes256 -out private/server.key.pem 2048或者( -passout pass:111111 注意 -passout pass:111111的位置)openssl genrsa -aes256 -passout pass:111111 -out private/server.key.pem 2048

2、建立服務端認證簽發請求  

openssl req -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=www.pldsec.com" 或者 ( -passin pass:111111 )openssl req -passin pass:111111 -new -key private/server.key.pem -out private/server.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=www.pldsec.com"

  和ca.csr的區別在於,這裡的CN不是*.pldsec.com,而是www.pldsec.com,因為我現在是在為www.pldsec.com申請認證

3、利用CA根憑證,簽發服務端認證

openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer或者( -passin pass:111111 )openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/server.csr -out certificates/server.cer -passin pass:111111

4、重啟Apache

/usr/local/apache2/bin/apachectl start

假如此時又出錯:
  Syntax error on line 95 of /usr/local/apache/conf/extra/httpd-ssl.conf:
  SSLCertificateFile: file ‘/usr/local/apache/conf/server.crt‘ does not exist or is empty
  這是因為在啟動https時,需要一個認證,而我們還沒有為這個網站產生一個認證,為了測試,下面將用openssl產生一個自簽名的認證:

cd /usr/local/apache/conf/sudo openssl req -new -x509 -nodes -out server.crt -keyout server.key

  下面openssl會要求為認證輸入一些相關資訊:

    Country Name (2 letter code) [XX]:CH       (國家)  State or Province Name (full name) []:ZheJiang       (省份)  Locality Name (eg, city) [Default City]:Hangzhou(城市)  Organization Name (eg, company) [Default Company Ltd]:PLDSEC(組織名稱)  Organizational Unit Name (eg, section) []:pldsec(組織單位名稱)  Common Name (eg, your name or your server‘s hostname) []:pldsec(通用名)  Email Address []:[email protected](郵箱)

  

七、測試單向認證
把server.key.pem和server.cer拷貝到/usr/local/httpd/conf/目錄下,然後啟動httpd,會要求輸入一個密碼(建立私密金鑰的密碼)
然後https://IP 訪問(測試HTTP是否正常跳轉到HTTPS)

1、apache設定自動將http跳轉到https的方法
vim /usr/local/apache/conf/httpd.conf
找到
<Directory "Apache的環境目錄">
AllowOverride All #這裡原先是None要改為All

在網站根目錄下建立.htaccess檔案,在最下面添加寫入如下語句:

RewriteEngine onRewriteCond %{SERVER_PORT} !^443$RewriteRule ^/?(.*)$ https://%{SERVER_NAME}/$1 [L,R]

重啟Apache,如果重啟時報錯,則找到#LoadModule rewrite_module modules/mod_rewrite.so,將前面的#號去掉,然後重啟

 

八、配置雙向認證

vim /usr/local/apache/conf/extra/httpd-ssl.confSSLCACertificateFile "/usr/local/httpd/conf/ca.cer"  SSLVerifyClient require  SSLVerifyDepth  10

  

九、簽發用戶端認證
1、建立用戶端私密金鑰,使用者:aaa,密碼:aaaaaa

openssl genrsa -aes256 -out private/aaa.key.pem 2048或者(給aaa使用者建立一個用戶端私密金鑰 密碼為aaaaaa)openssl genrsa -aes256 -passout pass:aaaaaa -out /usr/local/private/aaa.key.pem 2048

2、建立用戶端認證簽發請求

openssl req -new -key private/aaa.key.pem -out private/aaa.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=aaa"或者(-passin pass:aaaaaa)openssl req -passin pass:aaaaaa -new -key private/chenchao.key.pem -out private/aaa.csr -subj "/C=CN/ST=SZ/L=SZ/O=pldsec/OU=pldsec/CN=aaa"

3、利用CA根憑證,簽發用戶端認證

openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/aaa.csr -out certificates/aaa.cer或者( -passin pass:111111 輸入服務端CA認證私密金鑰密碼 )openssl x509 -req -days 3650 -sha1 -extensions v3_req -CA certificates/ca.cer -CAkey private/ca.key.pem -CAserial ca.srl -CAcreateserial -in private/aaa.csr -out certificates/aaa.cer -passin pass:111111

4、把用戶端認證轉換成p12格式

openssl pkcs12 -export -clcerts -inkey private/aaa.key.pem -in certificates/aaa.cer -out certificates/aaa.p12 或者 (-passin pass:aaaaaa -passout pass:bbbbbb 先輸入用戶端密碼,然後重設密碼,舊密碼和新密碼可以相同,也可以不同)openssl pkcs12 -export -clcerts -inkey private/aaa.key.pem -in certificates/aaa.cer -out certificates/aaa.p12 -passin pass:aaaaaa -passout pass:bbbbbb

  這步是必須的,因為稍後就需要把用戶端認證匯入到瀏覽器裡,但是一般瀏覽器都不能直接使用PEM編碼的認證

 

十、測試雙向認證
把ca.cer拷貝到%HTTPD_HOME%/conf/目錄下,重啟httpd

cp /usr/local/certificates/ca.cer /usr/local/apache/conf/

  

接下來要把client.p12匯入到瀏覽器裡
匯入的時候會要求輸入密碼,這是為了避免有人偷偷拷貝了別人的用戶端認證,偽裝成合法使用者

 

Linux下Apache 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.