SSL 憑證申請、取得及安裝

towns 有申請過憑證,但每次都不太瞭解相關資訊,towns 在這裡寫下申請流程並說明一下(以 TWCA為例)

1. 使用 openssl 產生 RSA 金鑰
openssl genrsa -out ./server.key 4096
產生私鑰

2. 使用私鑰產生憑證請求檔(CSR)
openssl req -new -key ./server.key -out ./server.csr
 Country Name (2 letter code) [XX]:TW  <== C
 國家名稱
 State or Province Name (full name) []:TAIWAN  <== ST
 州/省名
 Locality Name (eg, city) [Default City]:TAIPEI  <== L
 打入所在位置(通常是城市名)
 Organization Name (eg, company) [Default Company Ltd]:test Inc.  <== O
 打入公司英文名
 註:這個資訊必需與申請網址時所使用的公司英文名稱相同,可以透過 whois 查詢 Registrat: 欄位下公司英文名 
 Organizational Unit Name (eg, section) []:SYSTEM <== OU
 組織單位名稱
 Common Name (eg, your name or your server's hostname) []: <== CN,憑證名稱
 打入申請網址(註:如果今天是申請 *.test.tw,就要打這一個,而不是 www.test.tw
 Email Address []:towns@test.tw
 
 Please enter the following 'extra' attributes
 to be sent with your certificate request
 A challenge password []:
 An optional company name []:

註1:以上金鑰及請求檔的產生,並沒有規定是由什麼產生,可以透過 windows、linux、mac等等,不過,towns 習慣使用 linux 的 openssl 產生
註2:關於 C、S、L、O、OU、CN 的資訊,可以由查看線上憑證中的“主體名稱”查看

3. 請求正式憑證
 1. https://www.twca.com.tw ==> 客服專區 ==> SSL 伺服器憑證 ==> TWCA SSL 類 ==> Step 3 上傳 CSR(Web)
 2. 貼上 server.csr 內容 -----BEGIN CERTIFICATE REQUEST----- 到 -----END CERTIFICATE REQUEST----- 全部貼上 ==> 續繼
 3. 檢查 CSR 內容
 4. 請輸入伺服器資訊。打入 伺服器軟體廠商、打入 通行密碼
 5. 公司基本資料、技術、業務、帳務聯絡人資訊
 6. 網域所有權驗證,簡單方式就是選“電話”

4. 送出後完成申請,等兩天後收信

5. 收到信件後,信件會說明憑證相關資訊,並附上憑證壓縮檔(通常內含三個檔案 root(根憑證)、server(伺服器憑證)、uca (中繼憑證))

接下來,就看看需求了
1. 放入 IIS 中,就需要合成 PFX 檔
2. 放入設備中(如 A10),就要將私鑰及憑證一起放入
3. 放入 apache、nginx,就要將私鑰及憑證 一起放入(通常查看 ssl.conf、default-ssl.conf 可以看到相關資訊)
4. 放入 發票系統,就需要合成 PFX 檔,再放入系統中,並設定金鑰路徑

註: *.pfx 是將私鑰及憑證合成一個檔案

參考資料:
SSL Knowledgebase 說明
https://support.ssl.com/Knowledgebase/Article/View/19/0/der-vs-crt-vs-cer-vs-pem-certificates-and-how-to-convert-them

GTW -- 憑證匯入教學(apache、tomcat)
https://blog.gtwang.org/linux/nginx-apache-tomcat-comodo-ssl-certificate-installation/ 

補充1:一次完成私鑰及請求檔的長指令
openssl req -nodes -newkey rsa:4096 -sha256 -keyout test.key -out test.csr -config ssl.conf
註:config 檔 ssl.conf 是參考保哥的文章寫出來的

補充2:一次完成私鑰及自簽憑證的長指令
openssl req -x509 -new -nodes -sha256 -utf8 -days 3650 -newkey rsa:4096 -keyout server.key -out server.crt -config ssl.conf
註:這個是抄保哥文章的內容

gandi -- 這個網站將憑證說明的非常清楚,而且,是中文
https://docs.gandi.net/zh-hant/ssl/common_operations/csr.html
https://docs.gandi.net/zh-hant/ssl/index.html


使用 Openssl 合成 PFX 檔

1. 將 私鑰(server.key) 及 憑證(server.crt) 放在同一目錄
2. openssl pkcs12 -export -out server.pfx -inkey server.key -in server.crt

註:在進行合併時,會要求打入 Password,自定密碼

參考資料

離散音符大的文章 -- 使用 openssl 合成 PFX 檔方式
https://hk.saowen.com/a/535e98468a96cbf577cc95ec36890481d36ddcf84edcc3858734228b5c4e6553    


名詞說明(未完成)
密鑰檔 => *.key 或無副檔名
可以是私鑰檔、也可以是公鑰檔,當沒有特別設定時,會以 ASCII(base64) 為主
公鑰檔內容會出現 -----BEGIN CERTIFICATE----- 開頭 -----END CERTIFICATE----- 結尾
私鑰檔內容會出現 -----BEGIN RSA PRIVATE KEY----- 開頭 -----END RSA PRIVATE KEY----- 結尾

憑證請求檔 => *.csr
憑證請求檔是 公鑰檔 + 身分資訊,當沒有特別設定時,會以 ASCII(base64) 為主,該檔案用途為提供憑證頒發機構(CA)簽署用
憑證請求檔內容會出現 -----BEGIN CERTIFICATE REQUEST----- 開頭 -----END CERTIFICATE REQUEST----- 結尾

憑證檔 => 格式很多,以下的附檔名都是憑證
    .pem – 隱私增強型電子郵件格式,通常是Base64格式的。
    .cer, .crt, .der – 通常是DER二進位格式的,很多時候也是Base64格式 = =。
    .p7b, .p7c – PKCS#7 SignedData structure without data, just certificate(s) or CRL(s),這樣的格式通常會包入多個憑證,可以簡單的用 windows 將各憑證分出來(P7B/PKCS#7 檔只會包含憑證與中繼憑證,不會包含私密金鑰。)
    .p12 – PKCS#12格式,包含憑證的同時可能還包含私鑰
    .pfx – PFX,PKCS#12之前的格式(通常用PKCS#12格式,比如由網際網路資訊服務產生的PFX檔案)

參考資料:
wiki -- X.509
https://zh.wikipedia.org/wiki/X.509

wenafi -- 根憑證、中繼憑證差別(有說明根憑證、中繼憑證及伺服器憑證)
https://www.venafi.com/blog/what-difference-between-root-certificates-and-intermediate-certificates 

哈部落 haway 大的文章 -- [SSL 基礎]私有金鑰、CSR 、CRT 與 中繼憑證
https://haway.30cm.gg/ssl-key-csr-crt-pem/

保哥文章 -- 認識 PKI 架構下的數位憑證格式與憑證格式轉換的心得分享
https://blog.miniasp.com/post/2018/04/21/PKI-Digital-Certificate-Format-Convertion-Notes 


憑證轉換方式

申請憑證後,取得的有可能是 DER 格式,這個格式看內容就是一段亂碼,PEM 則是可看如 ----BEGIN 及 ----END。如果需要合併成 PFX 檔時,需要將 DER 轉為 PEM 會比較方便處理(因為使用 DER 可能會無法正常讀取),這時可以使用 openssl 轉換格式

openssl x509 -in file.crt -inform der -outform pem -out file.pem

註1:file.crt、file.pem 這個附檔名不見得一定這樣的,towns 的附檔名是 cer

MASNEC 大的 blog -- 有提到編碼轉換(DER 轉 PEM)
http://masnec.logdown.com/posts/184740-ssl-certificate

補充說明:

DER 格式:以 Binary 存放(直接看檔案就是亂碼)
PEM 格式:以 ASCII(base64) 存放,第一行為 "---BEGIN"

將 p7b 轉為 pem
openssl pkcs7 -print_certs -in server.p7b -out server2.pem

補充:如果出現了 unable to load PKCS7 object 錯誤使用以下兩種方式處理,1 不行就用 2
1. openssl pkcs7 -inform der -in a.p7b -out a.cer
2. 使用 windows 開啟憑證後,再匯出 = =
 點選 p7b 憑證 => 點選指定憑證(有時會出現多個憑證)用滑鼠左鍵點選該憑證兩下開啟憑證資料 => 點詳細資料 => 複製到檔案 => 選 base64 => 指定路徑及檔名 => 完成匯出

3. pem 轉為 p7b
openssl crl2pkcs7 -nocrl -certfile server.pem -out server.p7b
需要注意 server.pem 中包了那些資訊,towns 是使用 Let's encrypt 產生的,所有有包 cert 及 chain

將 cer 轉成 p7b
通常收到憑證中心送來的檔案,多為 cer 檔,轉檔可以使用 windows 開啟後,使用 複製到檔案 就可以轉成 p7b 檔

將 cer 轉成 pem
openssl x509 -in server.cer -out server.pem -inform PEM
其實,格式是相同的,感覺不需要做轉換,只需要改檔名

參考資料:
ssorc大文章 -- openssl 指令 command line – 轉檔 pem/der/p7b/pfx/cer
https://ssorc.tw/7142/openssl-%E6%8C%87%E4%BB%A4-command-line-%E8%BD%89%E6%AA%94-pem-der-p7b-pfx-cer/

stackexchange 討論 -- quanta 大回應
https://serverfault.com/questions/417140/convert-from-p7b-to-pem-via-openssl

citrix 官方文件 -- 使用 windows 將 p7b 重新匯出為base64 的 cer檔
https://support.citrix.com/article/CTX124429/


關於 Apache 加入憑證的動作

1. 安裝 SSL 模組
2. 產生私鑰
3. 申請憑證
4. 設定 apache conf 檔
5. 測試網頁

註1:apache 需要加入中繼憑證,如果申請 TWCA 的憑證,通常會有兩個中繼憑證(uca_1.cer、uca_2.cer),需手動合成一個
註2:中繼憑證在設定檔中需要加入 SSLCertificateChainFile 並指定檔案路徑
註3:合併憑證 cat uca_1.cer、uca_2.cer > uca.cer

補充1:在伺服器上加裝憑證(apache、ngainx等…)
一般來說根憑證(root.cer)、中繼憑證、server SSL憑證,都必需放入,這時需要將這三個憑證合成一個,就可以了
補充2:憑證合併是有順序性的 server > uca > root


OPENSSL常用語法彙整

這個網頁中將常用的功能,簡單明確的寫出來,是個很棒的說明

參考資料:
SSL憑證專業評鑑網
https://www.sslbuyer.com/index.php?option=com_content&view=article&id=129:openssl-command-intro&catid=25&Itemid=4031  


指令查看憑證到期日期

openssl x509 -enddate -noout -in fullchain1.pem
notAfter=Jun 4 03:50:00 2017 GMT
notAfter 就是憑證的到期日

不好意思 Tsung 大,直接貼您的文字了

openssl x509 -dates -noout -in fullchain.pem
notBefore=May 28 06:41:16 2020 GMT
notAfter=Aug 26 06:41:16 2020 GMT

參考資料:
Tsung's Blog
https://blog.longwin.com.tw/2017/04/ssl-pem-%E6%86%91%E8%AD%89-%E5%A6%82%E4%BD%95%E6%9F%A5%E8%A9%A2%E4%BD%95%E6%99%82%E9%81%8E%E6%9C%9F/    


其他參考資料 -- openssl 指令 command line
https://ssorc.tw/42/openssl-%E6%8C%87%E4%BB%A4/ 


使用 openssl 查看憑證內容

openssl x509 -in [憑證檔] -text -noout
註:crt、pem都可以

參考資料:
sslbuyer
https://www.sslbuyer.com/index.php?option=com_content&view=article&id=129:openssl-command-intro&catid=25&Itemid=4031  


使用萬用憑證(WildCard)對於子域名的支援

在這篇說明中(CloudFlare),萬用SSL證書僅支持根或一級子域(如:test.com.tw、a.test.com.tw),二級以上的子域(如 c.a.test.com.tw),需另外申請子網域憑證

參考資料:
iT邦幫忙 -- raytracy 大回應
https://ithelp.ithome.com.tw/questions/10189118

CloudFlare 說明
https://support.cloudflare.com/hc/en-us/articles/204151138-Can-I-use-Cloudflare-SSL-certificates-on-my-fourth-level-subdomain-#h_408802647171549663799400 


用 OpenSSL 建立自簽憑證

 

參考資料:
保哥 -- 如何使用 OpenSSL 建立開發測試用途的自簽憑證 (Self-Signed Certificate)
https://blog.miniasp.com/post/2019/02/25/Creating-Self-signed-Certificate-using-OpenSSL 


 

 


base64 cer 與 binary cer 互換

perko 大說的是使用 windows 轉換
To convert from a DER to a base64, you can use certutil :
certutil -encode filename.cer newfilename.cer

And from a base64 to a DER, you can use :
certutil -decode filename.cer newfilename.cer

garethTheRed 大說的是使用 openssl 轉換
As you have the openssl tag on your question, you should use:
openssl x509 -inform der -in infile.cer -out outfile.cer

In the reverse direction:
openssl x509 -outform der -in infile.cer -out outfile.cer

參考資料:
serverfault -- perko 及 garethTheRed 回應
https://serverfault.com/questions/992700/convert-der-cer-format-to-base64-cer 


轉換格式的網址

網路中文有提供 SSL 檔案格式轉換器呢!

網址:
https://ssl.net-chinese.com.tw/ssl-converter.php 


在 cmd 模式下檢查 ssl 憑證的工具 -- sslscan

參考資料:SJ大文章
https://blog.toright.com/posts/5312/%E7%94%A8-sslscan-%E6%AA%A2%E6%B8%AC%E4%BD%A0%E7%9A%84-https-%E9%80%A3%E7 %B7%9A%E5%8D%94%E5%AE%9A%E5%AE%89%E5%85%A8%E6%80%A7.html


憑證格式問題

在系統中,有時會發生憑證格式讀取問題,cer、pem,這個可能是因為系統或程式存取造成,如果發生,可以試著變更格式

 


觀念問題

金鑰
憑證
演算法
註:以上的三件事,是分開的三個部分

參考資料:
River Chan 大大文章
https://medium.com/@RiverChan/%E5%9F%BA%E7%A4%8E%E5%AF%86%E7%A2%BC%E5%AD%B8-%E5%B0%8D%E7%A8%B1%E5%BC%8F%E8%88%87%E9%9D%9E%E5%B0%8D%E7%A8%B1%E5%BC%8F%E5%8A%A0%E5%AF%86%E6%8A%80%E8%A1%93-de25fd5fa537


詳細的憑證資訊

YIDAS 大文章 -- TLS/SSL憑證(Certificate)常用指令 – 製作CSR
https://code.yidas.com/tls-ssl-certificate-guide/ 


憑證合併

通常申請後會收到二、三個檔案(root(根憑證)、server(伺服器憑證)、uca (中繼憑證)),有些單位會將三個憑證合成一個(如 Let's Encryp),有些時候,需要將這三個憑證併在一起,在一些憑證測試的網頁(如 SSL Checker)才會出現正常憑證,這時就需要合併,如何合併,其實很單純,如果都是 Base64格式的,可以用notepad++將這三個內容併起來,不過要注意,因為軟體有點笨,所以,在合併時必需有順序,依序為 server(伺服器憑證)、uca (中繼憑證)、root(根憑證),這時取得的憑證資訊才會正確


SSL 雙向認證

towns 對雙向認證是一頭露水的,先了解一下內容

參考資料:
勤能補拙大文章
https://blog.csdn.net/zark721/article/details/104733930

Angelia_cfq大文章
https://www.twblogs.net/a/5b8b0ab52b7177145dc8bdb7

金色財金
https://ppfocus.com/0/spaaf59a2.html


憑證問題

正式憑證如果放在網路封閉的環境中,Chrome 及 Edge,會發生憑證無效的情形,但 Firefox 則正常,這個問題是因為 Chrome 及 Edge 會去驗證根憑證權威伺服器或中繼憑證的伺服器,當網路無法對外時,Chrome 及 Edge 無法核對憑證的合法性,所以會出現憑證無效的情形,如果要測試,請用可以對外的主機進行驗證。詳細說明,可看 raytracy 大大說明。

參考資料
raytracy 大大說明
https://ithelp.ithome.com.tw/questions/10193796


網域轉移

 

參考資料:
godaddy
https://tw.godaddy.com/offers/domains/domain-transfer

留言

這個網誌中的熱門文章

zimbra 安裝、管理、設定

Fortigate 100D -- 管理、設定

IT 隨手記6