今天無意中和@snnn119說起SSL的事情,我才發現居然現在有免費的SSL證書了。搜了一下,發現從2009年的9月開始,微軟就把startssl加進根證書列表裏面了……
好吧。記錄一下。
首先去http://www.startssl.com,點左上角的“Sign Up”來申請一個帳號。
填一堆註冊信息之後,會發封郵件給你,把郵件裏面的驗證碼填上后,賬號就算註冊好了。不過這個還不夠,馬上就會要“認證”郵件。其實就是給你郵箱再發一封驗證碼,然後再填一次,然後就徹底Ok了。
之後是“認證”域名。
Control Panel》Validations Wizard,然後選擇“Domain Name Validation”,然後輸入域名,然後選擇是往whois裏面的郵箱、hostmaster@domain、 postmaster@domain或webmaster@domain其中的一個發驗證碼,收到之後再填回去就算是認證成功了。
然後就是生成SSL的key和cer。
選擇“Certificates Wizard”,然後選擇“Web Server SSL/TLS Certificate”,輸入一個密碼,然後重復(一定要記下來,這個很重要,配置好nginx之後每次重啓nginx都要用,也可以去Tools那裏Decrypt一下,就不用了),然後就可以生成一個private key了。然後輸入子域名,就可以生成cer文件了。
如果有多個子域名,那麽就生成多對key/cer文件。
然後就是配置nginx了。之前聽説一個IP只能對應一個SSL證書,經過@snnn119的講解,這個也是正常的,畢竟要先要根據證書建立一個SSL連接,然後再在上面走http協議。我是根據這個教程來配的。
我的是這樣的:
1 2 3 4 5 6 7 8 9 10 11 12 13 | server { listen 443; #端口 ssl on; #打開SSL ssl_session_timeout 5m; #ssl超時 server_name blog.netson-cn.net; #域名 ssl_certificate blogssl.cer; #給blog.netson-cn.net生成的cer文件的地址 ssl_certificate_key blogssl.key; #對應的key文件 #日誌地址 access_log /var/log/nginx/ssl-blog.netson-cn.net.access.log; #我之前把根目錄、php配置、50x錯誤頁面等内容都放在這個文件裏面了,這下省事了:) include wordpress-netson.conf; } |
説白了就是建立多一個nginx的虛擬機,端口是443,打開ssl……
之後測試成功了……然後我想死馬儅活馬騎,生成了另外一個子域的key和cer,照貓畵虎再配一遍……於是,很意外地,成功了……一點周折都沒有……
不過這可把@snnn119奇怪坏了,我這完全是瞎貓撞死老虎,SSL的原理一點都不懂,配好了也是知其然不知其所以然的……到這會兒人家還在研究這究竟咋回事呢……而我就悠哉遊哉得寫這篇Blog了……
PS:根據@snnn119的最新研究研究結果表明,用linux下的wget訪問排在nginx配置文件後面的那個子域的話,會用第一個子域的key,導致驗證失敗,但是用瀏覽器FireFox 3.6,IE8則沒有這個問題,“wget请求的时候,没有把servername带上。而浏览器带的有”,而在連接ssl的時候帶上servername,“是以TLSv1的extension的方式出现的”。
PSS:@snnn119同學發了一篇Blog詳細地説了一下原理。
最重要的是下面的内容:
库:
- openssl: 0.9.8f
客户端:
- Mozilla Firefox 2.0 or later
- Opera 8.0 or later (with TLS 1.1 enabled)
- Internet Explorer 7.0 or later (on Vista, not XP)
- Google Chrome
- Safari 3.2.1 on Mac OS X 10.5.6
服务器:
- apache/nginx的较新版本都支持,主要取决于tls库(比如openssl)。
也就是說,在XP下面,並且用IE的話,如果用HTTPS訪問nginx配置文件裏面排在後面的ssl虛擬機,就會報一個證書不匹配的錯誤。
IE会自动从webtrust更新证书列表并自动安装。并且startcom在08年的时候从安永通过了webtrust认证,但我不确定它的Class 1证书是否在上述之列。