標籤: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認證