X.509證書的核心是根據RFC 5280編碼和/或數字簽名的數字文檔。php
實際上,術語X.509證書一般是指X5209 v3證書標準的IETF的PKIX證書和CRL配置文件,如RFC 5280中所規定的,一般稱爲公鑰基礎結構的 PKIX (X.509)。html
百科介紹 https://baike.baidu.com/item/X.509/2817050?fr=aladdinnode
一樣的X.509證書,可能有不一樣的編碼格式,常見如下兩種編碼格式.nginx
在"-----BEGIN CERTIFICATE-----" 和 "-----END CERTIFICATE-----"之間存放web
查看PEM格式證書的信息: openssl x509 -in certificate.pem -text -nooutapache
Apache和Nginx服務器偏向於使用這種編碼格式.可是後綴擴展名可能並非 .pem, 能夠是.cer或者.crt做爲擴展名安全
pem類型的數據要根據base64編碼解碼後,獲得的數據須要進行增長或裁剪特殊字符-、\n、\r、begin信息、end信息等。服務器
查看DER格式證書的信息: openssl x509 -in certificate.der -inform der -text -nooutdom
Java和Windows服務器偏向於使用這種編碼格式. 這些證書也能夠用CER或者CRT做爲擴展名。工具
der類型的不用在編碼解碼,直接就是二進制的數據能夠直接使用
查看KEY的辦法:openssl rsa -in mykey.key -text -noout若是是DER格式的話,應該這樣:openssl rsa -in mykey.key -text -noout -inform der
其核心內容是一個公鑰(附帶了一些別的信息),在生成這個申請的時候,同時也會生成一個私鑰,私鑰要本身保管好(基本就是剛纔說的 key文件了).
查看的辦法:openssl req -noout -text -in my.csr (若是是DER格式的話照舊加上-inform der)
對nginx服務器來講,通常CRT和KEY是分開存放在不一樣文件中的,但Windows的IIS則將它們存在一個PFX文件中,(所以這個文件包含了證書及私鑰)這樣會不會不安全?應該不會,PFX一般會有一個"提取密碼",你想把裏面的東西讀取出來的話,它就要求你提供提取密碼,PFX使用的時DER編碼,如何把PFX轉換爲PEM編碼?
openssl pkcs12 -in for-iis.pfx -out for-iis.pem -nodes
這個時候會提示你輸入提取代碼. for-iis.pem就是可讀的文本.
生成pfx的命令相似這樣:openssl pkcs12 -export -in certificate.crt -inkey privateKey.key -out certificate.pfx
其中CACert.crt是CA(權威證書頒發機構)的根證書,有的話也經過-certfile參數一塊兒帶進去.這麼看來,PFX實際上是個證書密鑰庫.
p7b - 以樹狀展現證書鏈(certificate chain),同時也支持單個證書,不含私鑰。.P7C文件是退化的SignedData結構,沒有包括簽名的數據。
JKS - 即Java Key Storage,這是Java的專利,跟OpenSSL關係不大,利用Java的一個叫"keytool"的工具,能夠將PFX轉爲JKS,固然 keytool也能直接生成JKS
證書操做有四種基本類型。查看,轉換,組合和提取。
即便PEM編碼的證書是ASCII,它們也不是人類可讀的。如下是一些命令,可讓您以人類可讀的形式輸出證書的內容
openssl x509 -in cert.pem -text -noout
openssl x509 -in cert.cer -text -noout
openssl x509 -in cert.crt -text -noout
若是您遇到這個錯誤,這意味着您正在嘗試查看DER編碼的證書,並須要使用「查看DER編碼證書」中的命令。
unable to load certificate
12626:error:0906D06C:PEMroutines:PEM_read_bio:no start line:pem_lib.c:647:Expecting: TRUSTEDCERTIFICATE
openssl x509 -in certificate.der -inform der -text -noout
若是您遇到如下錯誤,則表示您嘗試使用DER編碼證書的命令查看PEM編碼證書。在「查看PEM編碼的證書」中使用命令
unable to load certificate
13978:error:0D0680A8:asn1 encodingroutines:ASN1_CHECK_TLEN:wrong tag:tasn_dec.c:1306:
13978:error:0D07803A:asn1 encodingroutines:ASN1_ITEM_EX_D2I:nested asn1 error:tasn_dec.c:380:Type=X509
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...)
在某些狀況下,將多個X.509基礎設施組合到單個文件中是有利的。一個常見的例子是將私鑰和公鑰二者結合到相同的證書中。
組合密鑰和鏈的最簡單的方法是將每一個文件轉換爲PEM編碼的證書,而後將每一個文件的內容簡單地複製到一個新文件中。這適用於組合文件以在Apache中使用的應用程序。
沃通簽發的證書提供 apache nginx 及其餘web服務的證書, 其餘公司簽發的證書基本也是差很少的.
由於我是要在haproxy上配置ssl證書, 這裏作一下證書合成. nginx apache 直接用crt證書加key私鑰這兩個文件就能夠了.
組合順序原則上是先key後證書, 證書順序是由下級機構證書逐級向上,最後到根root機構證書