TLS是傳輸層安全協議(Transport Layer Security)的縮寫,是一種對基於網絡的傳輸的加密協議,能夠在受信任的第三方公證基礎上作雙方的身份認證。TLS能夠用在TCP上,也能夠用在無鏈接的UDP報文上。協議規定了身份認證、算法協商、密鑰交換等的實現。java
SSL是TLS的前身,如今已再也不更新node
TLS與SSL對於不是專業搞安全的開發人員來說,能夠認爲是差很少的,這兩者是並列關係,詳細差別見 http://kb.cnblogs.com/page/197396/算法
簡單地說,OpenSSL是SSL的一個實現,SSL只是一種規範.理論上來講,SSL這種規範是安全的,目前的技術水平很難破解,但SSL的實現就可能有些漏洞,如著名的"心臟出血".OpenSSL還提供了一大堆強大的工具軟件,強大到90%咱們都用不到.瀏覽器
X.509 - 這是一種證書標準,主要定義了證書中應該包含哪些內容.其詳情能夠參考RFC5280,SSL使用的就是這種證書標準.安全
一樣的X.509證書,可能有不一樣的編碼格式,目前有如下兩種編碼格式.
X.509的證書文件,通常以.crt結尾,根據該文件的內容編碼格式,能夠分爲如下二種格式:服務器
打開看文本格式,以"-----BEGIN..."開頭, "-----END..."結尾,內容是BASE64編碼.網絡
Apache和*NIX服務器偏向於使用這種編碼格式.socket
打開看是二進制格式,不可讀.工具
Java和Windows服務器偏向於使用這種編碼格式ui
這是比較誤導人的地方,雖然咱們已經知道有PEM和DER這兩種編碼格式,但文件擴展名並不必定就叫"PEM"或者"DER",常見的擴展名除了PEM和DER還有如下這些,它們除了編碼格式可能不一樣以外,內容也有差異,但大多數都能相互轉換編碼格式.
常見於*NIX系統,有多是PEM編碼,也有多是DER編碼,大多數應該是PEM編碼,相信你已經知道怎麼辨別.
常見於Windows系統,一樣的,多是PEM編碼,也多是DER編碼,大多數應該是DER編碼.
一般用來存放一個公鑰或者私鑰,並不是X.509證書,編碼一樣的,多是PEM,也多是DER.
查看KEY的辦法:openssl rsa -in mykey.key -text -noout
若是是DER格式的話,同理應該這樣了:openssl rsa -in mykey.key -text -noout -inform der
這不是證書,能夠簡單理解成公鑰,生成證書時要把這個提交給權威的證書頒發機構。
其核心內容是一個公鑰(固然還附帶了一些別的信息),在生成這個申請的時候,同時也會生成一個私鑰,私鑰要本身保管好.作過iOS APP的朋友都應該知道是怎麼向蘋果申請開發者證書的吧.
查看的辦法:
openssl req -noout -text -in my.csr
(若是是DER格式的話照舊加上-inform der,這裏不寫了)
對*nix服務器來講,通常CRT和KEY是分開存放在不一樣文件中的,但Windows的IIS則將它們存在一個PFX文件中
(所以這個文件包含了證書及私鑰)這樣會不會不安全?應該不會,PFX一般會有一個"提取密碼",你想把裏面的東西讀取出來的話,它就要求你提供提取密碼,PFX使用的時DER編碼,如何
openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes
這個時候會提示你輸入提取代碼. for-iis.pem就是可讀的文本.
openssl pkcs12 -export -out certificate.pfx -inkey privateKey.key -in certificate.crt -certfile CACert.crt
其中CACert.crt是CA(權威證書頒發機構)的根證書,有的話也經過-certfile參數一塊兒帶進去.這麼看來,PFX實際上是個證書密鑰庫.
利用Java的一個叫"keytool"的工具,能夠將PFX轉爲JKS,固然了,keytool也能直接生成JKS,不過在此就很少表了.
PEM轉爲DER openssl x509 -in cert.crt -outform der -out cert.der DER轉爲PEM openssl x509 -in cert.crt -inform der -outform pem -out cert.pem
(提示:要轉換KEY文件也相似,只不過把x509換成rsa,要轉CSR的話,把x509換成req...)
向權威證書頒發機構申請證書
openssl req -newkey rsa:2048 -new -nodes -keyout my.key -out my.csr
把csr交給權威證書頒發機構,權威證書頒發機構對此進行簽名,完成.保留好csr,當權威證書頒發機構頒發的證書過時的時候,你還能夠用一樣的csr來申請新的證書,key保持不變.
openssl req -newkey rsa:2048 -new -nodes -x509 -days 3650 -keyout key.pem -out cert.pem
在生成證書的過程當中會要你填一堆的東西,其實真正要填的只有Common Name,一般填寫你服務器的域名,如"yourcompany.com",或者你服務器的IP地址,其它均可以留空的. 生產環境中仍是不要使用自籤的證書,不然瀏覽器會不認,或者若是你是企業應用的話可以強制讓用戶的瀏覽器接受你的自簽證書也行.向權威機構要證書一般是要錢的,但如今也有免費的,僅僅須要一個簡單的域名驗證便可.有興趣的話查查"沃通數字證書".