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
留言
張貼留言