首先SSL/TLS是什麼鬼?好比你如今正在看的https://awaimai.com/,前面是https,代表這個是https協議,https就是http + SSL/TLS,在http外面套一個加密層,讓第三方難以獲得傳輸的明文數據。若是用chrome訪問這個站,在這個URL旁邊會顯示一個綠色的鎖,代表這個鏈接是安全的。另外境外的https還有一個附加效果就是抵禦關鍵字的審查,同時Google也更喜歡收錄https的站點。html
其實以上是在說廢話,看這文章的乃萌確定是知道此爲什麼物纔會找到這裏來的啦,因此就不廢話了,如下是搭建步驟:linux
因爲這裏主要講搭建步驟,去CA機構註冊什麼的就不介紹了,我的小站推薦 StartSSL 和 AlphaSSL ,前者能夠獲得免費證書。nginx
執行如下命令git
$ openssl genrsa –out my-private.key 2048
就會在當前目錄下生成一個私鑰文件:my-private.key,文件名本身隨便定義。
若是須要對私鑰加密,能夠執行sql
$ openssl genrsa -aes256 –out my-private.key 2048
這時須要輸入你的自定義密碼來保護這個私鑰,以後的步驟若用到私鑰,則會要求你輸入你的自定義密碼,而後再執行chrome
$ openssl req –new –key my-private.key –out www.awaimai.com.csr
這時會要求你輸入一些信息,具體以下:apache
Country Name (2 letter code) [AU]: State or Province Name (full name) [Some-State]: Locality Name (eg, city) []: Organization Name (eg, company) [Internet Widgits Pty Ltd]: Organizational Unit Name (eg, section) []: Common Name (eg, YOUR name) []: Email Address []: A challenge password []: An optional company name []:
注意:從 Email Address 開始不要填寫。Common Name 填寫你要 SSL 支持的域名(你的站的域名),如 www.awaimai.com。若是你申請的是泛域名證書,那麼這裏應該填寫相似 *.awaimai.com
填寫完畢後就會生成一個 www.awaimai.com.csr 文件,這樣第一步就完成了。ubuntu
使用任何一個文本編輯器打開剛纔生成的csr文件,你將會看到相似以下的內容:瀏覽器
-----BEGIN CERTIFICATE REQUEST-----
MIICrjCCAZYCAQAwaTELMAkGA1UEBhMCR0IxDzANBgNVBAgMBkxvbmRvbjEPMA0G
......
-----END CERTIFICATE REQUEST-----
複製裏面所有內容,而後在CA機構網站上,在提交csr內容的地方,粘貼。以下是 StartSSL 和 AlphaSSL 的網站地址。
簽發成功後,你就能下載回來一個.crt文件,可能經過網頁上下載,也可能經過郵件方式發送給你。若是是郵件方式的話,要注意最好是使用gmail郵箱。郵件方式的話須要自行復制裏面crt文件的部分自行保存爲crt文件。crt文件相似如下的格式:
-----BEGIN CERTIFICATE-----
MIIETTCCAzWgAwIBAgILBAAAAAABRE7wNjEwDQYJKoZIhvcNAQELBQAwVzELMAkG
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0xNDAyMjAxMDAw
MDBaFw0yNDAyMjAxMDAwMDBaMEwxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
YWxTaWduIG52LXNhMSIwIAYDVQQDExlBbHBoYVNTTCBDQSAtIFNIQTI1NiAtIEcy
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2gHs5OxzYPt+j2q3xhfj
kmQy1KwA2aIPue3ua4qGypJn2XTXXUcCPI9A1p5tFM3D2ik5pw8FCmiiZhoexLKL
dljlq10dj0CzOYvvHoN9ItDjqQAu7FPPYhmFRChMwCfLew7sEGQAEKQFzKByvkFs
MVtI5LHsuSPrVU3QfWJKpbSlpFmFxSWRpv6mCZ8GEG2PgQxkQF5zAJrgLmWYVBAA
cJjI4e00X9icxw3A1iNZRfz+VXqG7pRgIvGu0eZVRvaZxRsIdF+ssGSEj4k4HKGn
kCFPAm694GFn1PhChw8K98kEbSqpL+9Cpd/do1PbmB6B+Zpye1reTz5/olig4het
ZwIDAQABo4IBIzCCAR8wDgYDVR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8C
AQAwHQYDVR0OBBYEFPXN1TwIUPlqTzq3l9pWg+Zp0mj3MEUGA1UdIAQ+MDwwOgYE
VR0gADAyMDAGCCsGAQUFBwIBFiRodHRwczovL3d3dy5hbHBoYXNzbC5jb20vcmVw
b3NpdG9yeS8wMwYDVR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWdu
Lm5ldC9yb290LmNybDA9BggrBgEFBQcBAQQxMC8wLQYIKwYBBQUHMAGGIWh0dHA6
Ly9vY3NwLmdsb2JhbHNpZ24uY29tL3Jvb3RyMTAfBgNVHSMEGDAWgBRge2YaRQ2X
yolQL30EzTSo//z9SzANBgkqhkiG9w0BAQsFAAOCAQEAYEBoFkfnFo3bXKFWKsv0
XJuwHqJL9csCP/gLofKnQtS3TOvjZoDzJUN4LhsXVgdSGMvRqOzm+3M+pGKMgLTS
xRJzo9P6Aji+Yz2EuJnB8br3n8NA0VgYU8Fi3a8YQn80TsVD1XGwMADH45CuP1eG
l87qDBKOInDjZqdUfy4oy9RU0LMeYmcI+Sfhy+NmuCQbiWqJRGXy2UzSWByMTsCV
odTvZy84IOgu/5ZR8LrYPZJwR2UcnnNytGAMXOLRc3bgr07i5TelRS+KIz6HxzDm
MTh89N1SyvNTBCVXVmaU6Avu5gMUTu79bZRknl7OedSyps9AsUSoPocZXun4IRZZ
Uw==
-----END CERTIFICATE-----
(以上其實就是AlphaSSL的crt證書,下文會用到)保存好了後,第二步就完成了。
這一步被不少其它的教程忽略,由於這一步在某些狀況下不是必需的,好比有的會直接給你返回證書鏈文件,可是在前面推薦的兩家機構所簽發的證書使用這個步驟的話,會簡化很多麻煩事。
首先,打開這個證書,你會發現你的網站與根證書中間差了一級,好比窩的這個的父證書是AlphaSSL,再上一級纔是根證書GlobalSign。而瀏覽器和操做系統裏面保存的均是可信任的根證書,中間那一層AlphaSSL極可能是沒有的,直接使用剛纔保存的crt證書會致使瀏覽器提示這是不可信的網站。怎麼辦呢?這就須要配置證書鏈。其實配置這個證書鏈很是的簡單,首先仍是使用文本編輯器打開你的crt證書,而後把你的父級crt證書的內容粘貼到後面,如這樣子:
-----BEGIN CERTIFICATE-----
本身的crt證書
-----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 父級的crt證書 -----END CERTIFICATE----- -----BEGIN CERTIFICATE----- 父級的父級crt證書 -----END CERTIFICATE-----
有多少層就作多少層(除了根證書那一層),而後保存爲新的crt文件,就完成了證書鏈的配置了。
這樣作能夠簡化後面的配置。
不過這個時候問題來了,父級的crt證書怎麼獲得呢?好比這裏窩的父級證書是AlphaSSL,直接用firefox訪問它的網站,而後查看證書信息,導出爲crt就好了。
由於nginx裏配置這個比apache容易多了,這裏就只介紹 Apache 的。
註明一下,窩用的linux發行版爲ubuntu 12.04,部分命令或路徑可能因不一樣的發生版略有差異。
首先開啓apache中SSL模塊:
# a2enmod ssl
進入路徑 /etc/apache2/sites-enabled,看一下是否是隻有一個default,而同時 /etc/apache2/sites-available/ 下存在 default-ssl,是的話在 sites-enabled下建立一個連接
/etc/apache2/sites-enabled# ln -s ../sites-available/default-ssl 001-ssl
在 001-ssl 配置文件中,除了SSL配置部分,其餘的保持和本來的http的站一致就行了(可別作出直接整個文件內容覆蓋這麼二的事情)。若是漏作這個步驟,Apache會報 ssl_error_rx_record_too_long 錯誤。而後開始配置SSL部分,注意如下三行:
SSLCertificateFile /home/root/awaimai.com.crt
SSLCertificateKeyFile /home/root/awaimai.com.key
SSLCertificateChainFile /home/root/awaimai.com.crt
其中,
若是已經把證書鏈直接配置到 crt 文件裏的話,SSLCertificateChainFile 就直接填寫crt文件的路徑。若是簽發機構把證書鏈文件也發給你的話,保存爲.pem文件而後在這裏引用便可。若是你的證書的父級證書是根證書,或已經被主流瀏覽器或操做系統普遍支持,那麼此段可註釋忽略。
最後檢查是否 SSLEngine on,對了之後執行
# service apache2 restart
重啓服務便可。
這裏只介紹HSTS的配置,由於這個極可能會用到,SPDY什麼的參閱別人的配置文章吧。執行如下命令
# a2enmod headers
開啓headers模塊,而後編輯文件 /etc/apache2/sites-enabled/001-ssl (若是你剛纔設置的文件名是001-ssl的話,若不是就本身換)
在VirtualHost裏面加入一行:
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
其中 preload 那一段是可選的,加不加都可,加了的話能夠去 google 申請 Chromium 的 Preload HSTS 列表。而 63072000 那個是有效期的秒數,63072000 是兩年的秒數,在有效期裏面,瀏覽器會記着這個站是應該用 https 訪問的。
最後嘛,爲啥窩會想到弄成https呢?由於窩知道不少路由器能夠開啓網站訪問log,會記錄下訪問者IP、所訪問的url、以及get/post參數內容。你知道這表示什麼嗎?
這表示若是你經過這個路由器上網,而後在普通 http 網頁上作登錄操做,那麼路由器的管理員能夠經過查 log 獲得你對應網站的登錄信息,這是很是危險的,由於絕大多數的網站在傳輸登錄信息的時候,均使用明文發送密碼,這樣你的賬號密碼就被看得一清二楚了。可是 https 的話,路由器根本沒法知道你所訪問的 url 是什麼,更別說具體的參數內容了,只能知道訪問者的IP和目標IP,安全性天然大大提升。
好比窩在知乎上的密碼會常常性的更換,爲何呢?由於只要登錄知乎,好比你在麥當勞用免費 wifi,那麼那邊的路由管理員就知道你的賬號密碼了。或者電信聯通什麼的也會知道,由於它們在政策下必須保留至少3個月的路由數據,而你的賬號密碼就在那裏保存至少三個月,想要抓你只要把你的登錄記錄找到,而後登錄你的賬號,查你的我的信息就知道你究竟是誰了。也就是說,任何非https鏈接下作登錄或其它敏感操做是很是危險的,全部的操做被完整的記錄了下來。窩徹底不明白知乎這種大站爲啥都不支持https,用戶私隱如此不值錢?
本文除了介紹SSL/TLS的配置外,還簡要的介紹了一下其必要性,科普一下網絡安全方面的東西。如對這方面還有疑問,歡迎留言或mail窩。
http://www.awaimai.com/126.html