經過 Linux+Apache+OpenSSL 完成 SSL ( Secure Socket Layer )認證效勞器,提供平安的 HTTPS ( Hypertext Transfer Protocol over Secure Socket Layer )效勞。
裝置 SSL
1. 裝置 openssl
tar -zxvf openssl-0.9.8a.tar.gz
cd openssl-0.9.8a
./configure
make
make install
openssl 裝置在 /usr/local/ssl 目錄中
2. 裝置 apache
tar -zxvf httpd-2.0.55.tar.gz
cd httpd-2.0.55
./configure –prefix=/usr/local/apache –enable-ssl –enable-rewrite –enable-so –with-ssl=/usr/local/ssl
make
make install
apache 裝置在 /usr/local/apache 目錄中
以上是經過源碼方式裝置,最佳的裝置方式經過 rpm 裝置。先裝置 apache 的 rpm ,再裝置 openssl 的 rpm , openssl 可主動裝置到 apache 目錄中。
認證先容
SSL 平安認證能夠本人天生,也能夠經過第三方的 CA ( Certification Authority )認證核心付費請求頒發。
SSL 平安認證包括:
1. CA 憑證,也叫根憑證或兩頭級認證。單向認證的 https , CA 憑證是可選的。次要手段是使認證形成一個憑證鏈結,以到達閱讀器疑心認證的手段。假如運用了 CA 憑證,效勞器認證和客戶認證都運用 CA 憑證來簽名。假如不裝置 CA 憑證,閱讀器默許以為是不平安的。
2. 效勞器認證。必選。經過效勞器私密金鑰,天生認證懇求檔案 CSR ,再經過 CA 憑證簽名天生效勞器認證。
3. 客戶認證。可選。假如有客戶認證,就是雙向認證的 HTTPS ,否則就是單向認證的 HTTPS 。天生方法和效勞器認證相似。
下面幾種認證都能夠本人天生。貿易上,普通本人提供效勞器或客戶認證真箇私密金鑰和認證懇求 CSR ,向第三方機構付費請求失掉經過 CA 憑證簽名的效勞器認證和客戶認證。
天生認證
用 openssl 提供的工具 CA.sh 簽署憑證,認證放在 /usr/local/apache2/conf/ssl.crt 目錄,先把工具拷貝過去:
cp /usr/share/ssl/misc/CA.sh /usr/local/apache2/conf/ssl.crt
1. CA 憑證(根憑證 / 兩頭級認證)
是 CA 認證機構提供,假如是雙向認證則必選,否則是可選。經過 CA 憑證,形成一個憑證鏈結,手段是使閱讀器疑心你的認證 。假如運用了 CA 憑證,用它來簽名效勞器和客戶認證,以到達閱讀器疑心的手段。
本人天生 CA 憑證方法:
./CA.sh –newca
斷行符號創立新檔案,輸出加密密碼,並填寫認證訊息:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Guangdong
Locality Name (eg, city) []:Shenzhen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx
Organizational Unit Name (eg, section) []:xxx
Common Name (eg, YOUR name) []:www.shenmiguo.com
Email Address []:xxx@xxx.com
Common Name 填入主機全稱是比擬好的挑選。這個稱號必需與經過閱讀器拜訪您網站的 URL 完整相反,否則使用者會發覺您效勞器認證的通用名與網站的名字不婚配,使用者就會疑心您的認證的實在性。效勞器認證和客戶認證的 Common Name 該當和 CA 分歧。
天生後果: demoCA/private/cakey.pem 是 CA 憑證的私密金鑰檔案, demoCA/cacert.pem 是 CA 憑證。
這樣就建好了一個 CA 效勞器,有了一個根憑證的私密金鑰 cakey.pem 及一張根憑證 cacert.pem, 如今就能夠用 cacert.pem 來給效勞器認證或客戶認證簽名了。
我們標準一下 CA 憑證的命名,把 CA 憑證和密鑰重新命名一下:
cp demoCA/private/cakey.pem ca.key
cp demoCA/cacert.pem ca.crt
ca.key 是兩頭級認證私密金鑰, ca.crt 是兩頭級認證。
2. 效勞器認證
a) 天生效勞器私密金鑰
openssl genrsa -des3 -out server.key 1024
輸出加密密碼,用 128 位 rsa 演算法天生密鑰,失掉 server.key 檔案。
b) 天生效勞器認證懇求( CSR )
openssl req -new -key server.key -out server.csr
CSR ( Certificate Signing Request )是一個認證簽名懇求,在請求認證之前,首先要在 WEB 效勞器上天生 CSR ,並將其提交給 CA 認證核心, CA 才幹給您簽發 SSL 效勞器認證。能夠這樣以為, CSR 就是一個在您效勞器上天生的認證。 CSR 次要包括以下形式:
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Guangdong
Locality Name (eg, city) []:Shenzhen
Organization Name (eg, company) [Internet Widgits Pty Ltd]:xxx
Organizational Unit Name (eg, section) []:xxx
Common Name (eg, YOUR name) []:shenmiguo.com
Email Address []:xxx@xxx.com
Please enter the following ‘extra’ attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Common Name 填入主機名稱和 CA 分歧。
c) 本人天生效勞器認證
假如不運用 CA 憑證簽名的話,用如下方式天生:
openssl req -x509 -days 1024 -key server.key -in server.csr > server.crt
用效勞器密鑰和認證懇求天生認證 server.crt , -days 參數指明認證無效期,單位為天。貿易下去說,效勞器認證是由經過第三方機構頒發的,該認證由第三方認證機構頒發的。
假如運用 CA 憑證簽名,用 openssl 提供的工具 CA.sh 天生效勞器認證:
mv server.csr newreq.pem
./CA.sh -sign
mv newcert.pem server.crt
簽署憑證後,可經過如下命令可檢查效勞器認證的形式:
openssl x509 -noout -text -in server.crt
可經過如下命令考證效勞器認證:
openssl verify -CAfile ca.crt server.crt
3. 客戶認證
客戶認證是可選的。假如有客戶認證,就是雙向認證 HTTPS ,否則就是單向認證 HTTPS 。
a) 天生客戶私密金鑰
openssl genrsa -des3 -out client.key 1024
b) 天生客戶認證簽名懇求
openssl req -new -key client.key -out client.csr
c) 天生客戶認證(運用 CA 憑證簽名)
openssl ca -in client.csr -out client.crt
d) 認證轉換成閱讀器熟悉的格式
openssl pkcs12 -export -clcerts -in client.crt -inkey client.key -out client.pfx
4. 認證列表
假如運用雙向認證,就會有三個私密金鑰和三個認證。辨別是 ca.key, ca.crt, server.key, server.crt, client.key, client.crt ,以及給閱讀器的 client.pfx 。
假如運用有 CA 憑證的單向認證,認證和私密金鑰就是 ca.key, ca.crt, server.key, server.crt 。
假如運用無 CA 憑證的單向認證,認證和私密金鑰就是 server.key, server.crt 。
配置認證
Apache 標準的做法是將擴充的配置都配置在相應的 conf 檔案中, httpd.conf 間接 Include 包括各功用配置的 conf 檔案(如 php 相關配置叫 php.conf , ssl 相關配置叫 ssl.conf )。這樣的益處是配置易於治理和變卦, httpd.conf 能夠仍然堅持扼要易懂。
1. 配置 httpd.conf
Include conf/ssl.conf
2. 配置 ssl.conf
次要配置包括認證途徑和認證戰略:
Listen 443 #https 連接埠
SSLRandomSeed startup builtin
SSLPassPhraseDialog builtin
SSLSessionCache dbm:logs/ssl_scache
SSLSessionCacheTimeout 300
SSLMutex default
ServerAdmin
DocumentRoot /usr/local/apache2/htdocs/
#DirectoryIndex digitalidCenter.htm
ServerName shenmiguo.com:443
ErrorLog logs/443-error_log
CustomLog /usr/local/apache2/logs/ssl_request_log "%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
LogLevel info
SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile /usr/local/apache2/conf/ssl.crt/server.crt # 指定效勞器認證途徑
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.crt/server.key # 效勞器認證私密金鑰途徑
SSLCertificateChainFile /usr/local/apache2/conf/ssl.crt/ca.crt #CA 兩頭級認證途徑
SSLCACertificatePath /usr/local/apache2/conf/ssl.crt # 客戶認證目錄 ( 雙向認證才用 )
SSLCACertificateFile /usr/local/apache2/conf/ssl.crt/client.crt # 客戶認證途徑 ( 雙向認證才用 )
SSLVerifyClient require # 強迫客戶必需持有 SSL 憑證懇求
SSLVerifyDepth 10
更多 mod_ssl 配置選項闡明能夠見 apache 的文檔:
http://lamp.linux.gov.cn/Apache/ApacheMenu/mod/mod_ssl.html
3. 發動 Apache
cd /usr/local/apache2/bin
./apachectl startssl
可修正 apachectl 指令碼,改成默許 ssl 方式發動 apache 。 apachectl 指令碼中的:
start|stop|restart |graceful)
$HTTPD -k $ARGV
ERROR=$?
;;
startssl|sslstart|start-SSL)
$HTTPD -k start -DSSL
ERROR=$?
;;
修正為:
stop|graceful)
$HTTPD -k $ARGV
ERROR=$?
;;
restart )
killall -9 httpd
$HTTPD -k start -DSSL
;;
start |startssl|sslstart|start-SSL)
$HTTPD -k start -DSSL
ERROR=$?
;;
發動的時分需求輸出 server.key 的密碼。能夠經過效勞器私密金鑰解密儲存,重啟也無需輸出密碼:
openssl rsa -in server.key -out my-server.key
chmod 400 server.key
ssl.conf 中的配置變卦成:
SSLCertificateKeyFile /usr/local/apache2/conf/ssl.crt/my-server.key # 效勞器認證解密私密金鑰途徑
原文來自http://yun1baxx.blog.hexun.com/52768794_d.html