導語
人對任何事物的認識都是階段性的,從無知到知曉,從懵懂到半知半解,從誤解到將信將疑,從暈頭轉向到下定決心吃透。
介紹
OpenSSL是一個強大的命令行工具,它可以用來處理許多種跟PKI(Public Key Infrastructure)即:公鑰基礎建設、HTTPS(HTTP以及TLS)等相關的技術。這篇提綱挈領式的隨筆文章可以提供快速的OpenSSL相關技術的命令咨詢,這對於IT軟件開發技術人員的日常工作來說非常的有必要。
這里主要包含了OpenSSL的一些例子,有:如何生成私鑰(private key)、CSR(certificate signing requests)、如何生成證書(certificate)、以及如何對他們進行格式轉換,這里當然只是一部分OpenSSL的最常用法了...
如何使用本文
- 如果你不熟悉CSR,證書簽名請求(certificate signing request),那么請從正文第一部分開始閱讀
- 除去第一部分,本文將會類似於命令行文檔的形式進行介紹
- 當你非常熟悉了解這些OpenSSL的基本技術知識之后,你可以隨時隨地直接查看你想要查看的正文部分,以備不時之需
什么是Certificate Signing Requests (CSRs)
如果你想獲得一個經過certificate authority (CA)認證的SSL certificate,那么你必須首先生成或者持有一個certificate singning request(CSR證書簽名請求,下文我將不再贅述中文)。一個CSR主要由一對公鑰私鑰中的public key、以及一些額外信息構成。
注意:CSR是由public key和一些類似公司明、國家、地區、省市的信息,兩者構成,其中公鑰還對應一個私鑰,也就是說CSR的產生必須依賴一對公鑰私鑰。
任何時候你生成一個CSR,都會被提示並要求提供一些關於證書的信息,這些信息是公開的就像你的工牌一樣作為你的唯一DN(Distinguised Name,識別名)。這些信息里面一個最重要的信息就是Comman Name(CN),這個信息是用來非常准確地描述該CSR所要產生的certificate的證書發布方的信息,這個信息全程Fully Qualified Domain Name(FQDN),通俗點解釋:有一個https的服務器我假設它是大學,有一個CSR我把它比作學校教務處的章子,有個certificate我把它比作軟件工程專業的畢業證書,章子上面有學校的最權威的信息,那么就很清楚了。對吧?
繼續,當使用命令行生成CSR的時候會有FQDN的IO交互輸入過程,當然你通過一路回車可以跳過這些輸入的步驟從而生成一個全是空格信息的CSR。
另外,還有一條FQDN中比較中要的DN是關於提供你的公司信息、或者組織信息,如果你正在為你的老板開發一款應用或者產品並且被要求使用SSL證書認證機制,那么你就不能一路回車的方式生成CSR了,什么是組織信息?給舉個例子:
--- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:Brooklyn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company Organizational Unit Name (eg, section) []:Technology Division Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com Email Address []:
如果你不像一個接着一個在控制台回答OpenSSL的csr生成輸入交互,那么就使用下面一段代碼一筆帶過:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
現在,你應該灰常明白CSR是什么了吧?如果還不太明白再回頭看一邊
如何生成CSR
前面說了,CSR里面包含了一個公鑰、和QFDN,因此首先你得有一個公鑰,如果沒有你就要生成一個,但實際上公鑰是由私鑰生成的,可以這么理解:公鑰是露在外頭的蘿卜莖葉、私鑰是埋在土里的蘿卜,要拿到公鑰肯定得有蘿卜啊⊙﹏⊙、
生成一個Private Key(私鑰)和對應的CSR
如果你想使用HTTPS(HTTP之上的TLS)來加密您的Apache HTTP或者Nginx web server,並且你希望使用Certificate Authority (CA) 技術來處理SSL certificate證書,那么就可以使用以下方式產生CSR。這些通過此種方式產生的CSR可以被發送到一個CA機制里,用來請求通過CA認證並獲得一個CA-signed SSL certificate(CA 認證的簽名文件),如果你的CA機制支持SHA-2話增加-sha256這個選項參數到下面的命令行,這個參數項可以用SHA-2算法給你要生成的CSR進行簽名。
下面的命令行生成一個2048-bit的private key(domain.key)以及一個CSR(domain.csr):
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -out domain.csr
緊接着通過控制台的交互來輸入你的QFDN信息,然后直至完成
注意:-newkey rsa:2048 這個參數項是用來指定這個這個private key生成的是2048-bit的結果,並且使用RSA算法。-nodes 這個參數項是用來指定private key不需要使用密碼加固。
用已有的private key(私鑰)來生成CSR
使用下面的方式來生成一個CSR,這個命令使用一個已存在的private key (domain.key)生成一個CSR(domain.csr):
openssl req \ -key domain.key \ -new -out domain.csr
回答控制台的交互輸入直到完成CSR生成。
注意:-key 這個參數項是用來指定一個已存在的private key的位置。-out這個指示csr文件產生的位置及名稱
用已存在的證書和私鑰生成CSR
你必須清楚的是:CSR是證書發布方使用私鑰+QFDNCSR產生的,CSR文件的內容由公鑰+QFDN構成,證書是由CSR經過簽名后頒發給證書持有方的。因此,通過一系列的算法是可以從證書里使用私鑰算出CSR來,這就像是學校教務處收回了你的畢業證書摳掉你的照片和其他信息還原回來就是CSR了,CSR就等於是一個證書空殼子。
使用下面命令來創建一個新的CSR(domain.csr),當然它是基於已存在的certificate(domain.crt)以及你的private key(domain.key):
openssl x509 \ -in domain.crt \ -signkey domain.key \ -x509toreq -out domain.csr
參數項 -x509toreq 用來表示使用一個X509類型的證書格式產生CSR。
生成一個SSL證書
如果你不想產生一個需要CA認證的證書,那么你就必須自己給這個證書簽名,啊啊啊?什么意思?說形象點,你犯校規被拒絕頒發畢業證書,為了蒙騙你爹媽你自己給自己蓋了個冒牌的章子,就這么理解。
一個可以正確被你自己識別證書當然可以是你自己簽名的證書,這就等於你自己造了個冒牌畢業證書,你當然自己得首先相信它是個ok的證書咯,我們為這樣的證書起名self-signed certificate(自簽名證書)。self-signed certificate可以用來給你的數據加密,它的效果跟使用CA-signed的效果是一樣的,不過當你把這樣的證書加密的數據放到瀏覽器或者其他終端的時候會產生warning,最常見的就是在chrome瀏覽器力彈出提示說該站點不安全什么什么的,因為它未經過不再CA-signed列表里,如果你想讓別的用戶正常瀏覽有兩種途徑,一個是把證書頒發給用戶並讓用戶導入該證書到瀏覽器或者其他終端應用,第二個就是交給CA授權認證(個人和小公司就算了吧)
下面這個章節主要講述 self-signed certificates的細節
生成一個 self-signed certificates(自簽名的證書)
使用下面的方式來生成一個自簽名的證書,如果你將准備使用它來加密你的Apache HTTP 或者 Nginx web server,並且你確定你不需要使用CA認證的certificate。
下面的命令用來生成一個2048-bit的private key(domain.key)以及 self-signed certificate (domain.crt) :
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -x509 -days 365 -out domain.crt
回答控制台CSR的相關信息直到CSR生成完畢。
參數項 -x509 告訴req子命令創建一個自簽名的證書,-days 365 這個參數項用來指定證書的有效時間為從現在開始的365天之后,一個中間臨時產生的CSR文件將會連同上述信息一並出現,當然這很正常。
使用一個已存在的私鑰生成一個self-signed certificate(自簽名證書)
使用下面的方式生成一個自簽名證書,當然前提是你已經擁有一個私鑰。
使用下面的命令基於private key (domain.key)產生一個self-signed certificate (domain.crt) :
openssl req \ -key domain.key \ -new \ -x509 -days 365 -out domain.crt
回答控制台CSR的相關信息直到CSR生成完畢。
參數項 -x509 告訴req子命令創建一個自簽名的證書,-days 365 這個參數項用來指定證書的有效時間為從現在開始的365天之后,-new 用來激活CSR 信息詢問交互
使用已存在的私鑰和CSR來生成self-signed certificate(自簽名證書)
使用這種方式的前提是你擁有了一個自己的private ke 以及對應的 CSR,並且你想通過它們生成一個自簽名證書。
下面的命令行基於一個private key (domain.key) 和對應的domain.csr創建一個elf-signed certificate (domain.crt):
openssl x509 \ -signkey domain.key \ -in domain.csr \ -req -days 365 -out domain.crt
待續未完
---恢復內容結束---
導語
人對任何事物的認識都是階段性的,從無知到知曉,從懵懂到半知半解,從誤解到將信將疑,從暈頭轉向到下定決心吃透。
介紹
OpenSSL是一個強大的命令行工具,它可以用來處理許多種跟PKI(Public Key Infrastructure)即:公鑰基礎建設、HTTPS(HTTP以及TLS)等相關的技術。這篇提綱挈領式的隨筆文章可以提供快速的OpenSSL相關技術的命令咨詢,這對於IT軟件開發技術人員的日常工作來說非常的有必要。
這里主要包含了OpenSSL的一些例子,有:如何生成私鑰(private key)、CSR(certificate signing requests)、如何生成證書(certificate)、以及如何對他們進行格式轉換,這里當然只是一部分OpenSSL的最常用法了...
如何使用本文
- 如果你不熟悉CSR,證書簽名請求(certificate signing request),那么請從正文第一部分開始閱讀
- 除去第一部分,本文將會類似於命令行文檔的形式進行介紹
- 當你非常熟悉了解這些OpenSSL的基本技術知識之后,你可以隨時隨地直接查看你想要查看的正文部分,以備不時之需
什么是Certificate Signing Requests (CSRs)
如果你想獲得一個經過certificate authority (CA)認證的SSL certificate,那么你必須首先生成或者持有一個certificate singning request(CSR證書簽名請求,下文我將不再贅述中文)。一個CSR主要由一對公鑰私鑰中的public key、以及一些額外信息構成。
注意:CSR是由public key和一些類似公司明、國家、地區、省市的信息,兩者構成,其中公鑰還對應一個私鑰,也就是說CSR的產生必須依賴一對公鑰私鑰。
任何時候你生成一個CSR,都會被提示並要求提供一些關於證書的信息,這些信息是公開的就像你的工牌一樣作為你的唯一DN(Distinguised Name,識別名)。這些信息里面一個最重要的信息就是Comman Name(CN),這個信息是用來非常准確地描述該CSR所要產生的certificate的證書發布方的信息,這個信息全程Fully Qualified Domain Name(FQDN),通俗點解釋:有一個https的服務器我假設它是大學,有一個CSR我把它比作學校教務處的章子,有個certificate我把它比作軟件工程專業的畢業證書,章子上面有學校的最權威的信息,那么就很清楚了。對吧?
繼續,當使用命令行生成CSR的時候會有FQDN的IO交互輸入過程,當然你通過一路回車可以跳過這些輸入的步驟從而生成一個全是空格信息的CSR。
另外,還有一條FQDN中比較中要的DN是關於提供你的公司信息、或者組織信息,如果你正在為你的老板開發一款應用或者產品並且被要求使用SSL證書認證機制,那么你就不能一路回車的方式生成CSR了,什么是組織信息?給舉個例子:
--- Country Name (2 letter code) [AU]:US State or Province Name (full name) [Some-State]:New York Locality Name (eg, city) []:Brooklyn Organization Name (eg, company) [Internet Widgits Pty Ltd]:Example Brooklyn Company Organizational Unit Name (eg, section) []:Technology Division Common Name (e.g. server FQDN or YOUR name) []:examplebrooklyn.com Email Address []:
如果你不像一個接着一個在控制台回答OpenSSL的csr生成輸入交互,那么就使用下面一段代碼一筆帶過:
-subj "/C=US/ST=New York/L=Brooklyn/O=Example Brooklyn Company/CN=examplebrooklyn.com"
現在,你應該灰常明白CSR是什么了吧?如果還不太明白再回頭看一邊
如何生成CSR
前面說了,CSR里面包含了一個公鑰、和QFDN,因此首先你得有一個公鑰,如果沒有你就要生成一個,但實際上公鑰是由私鑰生成的,可以這么理解:公鑰是露在外頭的蘿卜莖葉、私鑰是埋在土里的蘿卜,要拿到公鑰肯定得有蘿卜啊⊙﹏⊙、
生成一個Private Key(私鑰)和對應的CSR
如果你想使用HTTPS(HTTP之上的TLS)來加密您的Apache HTTP或者Nginx web server,並且你希望使用Certificate Authority (CA) 技術來處理SSL certificate證書,那么就可以使用以下方式產生CSR。這些通過此種方式產生的CSR可以被發送到一個CA機制里,用來請求通過CA認證並獲得一個CA-signed SSL certificate(CA 認證的簽名文件),如果你的CA機制支持SHA-2話增加-sha256這個選項參數到下面的命令行,這個參數項可以用SHA-2算法給你要生成的CSR進行簽名。
下面的命令行生成一個2048-bit的private key(domain.key)以及一個CSR(domain.csr):
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -out domain.csr
緊接着通過控制台的交互來輸入你的QFDN信息,然后直至完成
注意:-newkey rsa:2048 這個參數項是用來指定這個這個private key生成的是2048-bit的結果,並且使用RSA算法。-nodes 這個參數項是用來指定private key不需要使用密碼加固。
用已有的private key(私鑰)來生成CSR
使用下面的方式來生成一個CSR,這個命令使用一個已存在的private key (domain.key)生成一個CSR(domain.csr):
openssl req \ -key domain.key \ -new -out domain.csr
回答控制台的交互輸入直到完成CSR生成。
注意:-key 這個參數項是用來指定一個已存在的private key的位置。-out這個指示csr文件產生的位置及名稱
用已存在的證書和私鑰生成CSR
你必須清楚的是:CSR是證書發布方使用私鑰+QFDNCSR產生的,CSR文件的內容由公鑰+QFDN構成,證書是由CSR經過簽名后頒發給證書持有方的。因此,通過一系列的算法是可以從證書里使用私鑰算出CSR來,這就像是學校教務處收回了你的畢業證書摳掉你的照片和其他信息還原回來就是CSR了,CSR就等於是一個證書空殼子。
使用下面命令來創建一個新的CSR(domain.csr),當然它是基於已存在的certificate(domain.crt)以及你的private key(domain.key):
openssl x509 \ -in domain.crt \ -signkey domain.key \ -x509toreq -out domain.csr
參數項 -x509toreq 用來表示使用一個X509類型的證書格式產生CSR。
生成一個SSL證書
如果你不想產生一個需要CA認證的證書,那么你就必須自己給這個證書簽名,啊啊啊?什么意思?說形象點,你犯校規被拒絕頒發畢業證書,為了蒙騙你爹媽你自己給自己蓋了個冒牌的章子,就這么理解。
一個可以正確被你自己識別證書當然可以是你自己簽名的證書,這就等於你自己造了個冒牌畢業證書,你當然自己得首先相信它是個ok的證書咯,我們為這樣的證書起名self-signed certificate(自簽名證書)。self-signed certificate可以用來給你的數據加密,它的效果跟使用CA-signed的效果是一樣的,不過當你把這樣的證書加密的數據放到瀏覽器或者其他終端的時候會產生warning,最常見的就是在chrome瀏覽器力彈出提示說該站點不安全什么什么的,因為它未經過不再CA-signed列表里,如果你想讓別的用戶正常瀏覽有兩種途徑,一個是把證書頒發給用戶並讓用戶導入該證書到瀏覽器或者其他終端應用,第二個就是交給CA授權認證(個人和小公司就算了吧)
下面這個章節主要講述 self-signed certificates的細節
生成一個 self-signed certificates(自簽名的證書)
使用下面的方式來生成一個自簽名的證書,如果你將准備使用它來加密你的Apache HTTP 或者 Nginx web server,並且你確定你不需要使用CA認證的certificate。
下面的命令用來生成一個2048-bit的private key(domain.key)以及 self-signed certificate (domain.crt) :
openssl req \ -newkey rsa:2048 -nodes -keyout domain.key \ -x509 -days 365 -out domain.crt
回答控制台CSR的相關信息直到CSR生成完畢。
參數項 -x509 告訴req子命令創建一個自簽名的證書,-days 365 這個參數項用來指定證書的有效時間為從現在開始的365天之后,一個中間臨時產生的CSR文件將會連同上述信息一並出現,當然這很正常。
使用一個已存在的私鑰生成一個self-signed certificate(自簽名證書)
使用下面的方式生成一個自簽名證書,當然前提是你已經擁有一個私鑰。
使用下面的命令基於private key (domain.key)產生一個self-signed certificate (domain.crt) :
openssl req \ -key domain.key \ -new \ -x509 -days 365 -out domain.crt
回答控制台CSR的相關信息直到CSR生成完畢。
參數項 -x509 告訴req子命令創建一個自簽名的證書,-days 365 這個參數項用來指定證書的有效時間為從現在開始的365天之后,-new 用來激活CSR 信息詢問交互
使用已存在的私鑰和CSR來生成self-signed certificate(自簽名證書)
使用這種方式的前提是你擁有了一個自己的private ke 以及對應的 CSR,並且你想通過它們生成一個自簽名證書。
下面的命令行基於一個private key (domain.key) 和對應的domain.csr創建一個elf-signed certificate (domain.crt):
openssl x509 \ -signkey domain.key \ -in domain.csr \ -req -days 365 -out domain.crt
待續未完
