Google 地圖平台根 CA 遷移常見問題

一般資訊

疑難排解

管理信任的憑證

附錄

一般資訊

異動簡介

總覽

Google 正在進行一項多年期計畫,預計核發及使用自家的根憑證,也就是以 HTTPS 採用的傳輸層安全標準 (TLS)/安全資料傳輸層 (SSL) 網際網路安全性為基礎的加密編譯簽名。

Google 地圖平台目前傳輸層安全標準 (TLS) 採用的根憑證保障,是由 Symantec 旗下廣受信賴的知名憑證授權單位 (CA)「GeoTrust Global CA」核發。實際上,所有傳輸層安全標準 (TLS) 用戶端 (例如網路瀏覽器、智慧型手機及應用程式伺服器) 都能辨識此根憑證,因此可以透過該憑證,確保與 Google 地圖平台伺服器的連線安全無虞。

Google 預計在 2020 及接下來幾年,將所有 Google 地圖平台服務遷移至由 Google 自家憑證授權單位 Google Trust Services (GTS) 所核發的根憑證。

至於這段期間的因應措施,Google 地圖平台已於 2018 年初先遷移至另一個也是備受信賴的 GlobalSign (GS) 根憑證。為順利完成憑證移轉,Google 已購買該根憑證的使用權 (以及 GlobalSign 用來核發該憑證的憑證授權單位)。

大多數的傳輸層安全標準 (TLS) 用戶端都已經認可 GlobalSign 憑證,因此其使用 Google 地圖平台時並不會受到這項初始異動的影響。

不過在某些情況下,特別是有專業用途需求 (例如嵌入式裝置),或使用者執行的是版本非常老舊的瀏覽器或作業系統時,部分用戶端可能就會缺少 GlobalSign 根憑證。這些用戶端必須更新憑證,才能確保其 Google 地圖平台的連線安全。Google 無法辨識這些用戶端,因此應用程式擁有者必須自行對應用程式進行所有必要的驗證。Google Trust Services 會在 GTS 網站中提供 HTTPS 測試端點,協助完成這項工作。相關技術細節請見下文。

等到要開始遷移至 GTS 根憑證時,大部分系統也可能會出現上述情況;不過只要按照本說明文件中的建議操作,大致上都可確保遷移作業順利完成,就算是專業系統也不用擔心。

技術摘要

如 2017 年 3 月 16 日在 Google 地圖平台付費方案的客戶服務入口網站所述 (更早之前也曾在 Google 安全性網誌中提及),Google 已經建立自己的根 CA「GTS」。如同其他 Google 服務,Google 地圖平台也會逐步改用 GTS 根 CA 簽署的傳輸層安全標準 (TLS) 憑證。

至於這段期間的因應措施,Google 已購買廣受信賴的現成 GS Root R2 CA。自 2017 年底起,Google 地圖平台已開始從 GeoTrust 根憑證遷移至這個憑證,並於 2018 年初完成遷移。

幾乎所有傳輸層安全標準 (TLS) 用戶端都已預先設為使用 GS Root R2 憑證,或透過一般軟體更新方式接收該憑證。不過,要是應用程式從無法辨識此憑證的用戶端,連線至 Google 地圖平台,應用程式開發人員應確保用戶端已經過測試,並在必要時更新憑證。

GTS 網站會提供 GS Root R2 憑證和所有 GTS 根憑證,也會針對端點提供 CA 簽署的傳輸層安全標準 (TLS) 憑證,以供開發人員測試。尤其是當您的用戶端可透過傳輸層安全標準 (TLS) 連線至 GS Root R2 測試端點,代表其信任 GS Root R2 憑證,因此應該不會受到近期異動的影響。

至少到 2018 年底前,Google 都會採用 GS Root R2 CA。在那之後,Google 地圖平台可能會直接移轉至 GTS CA,有時也可能會改回使用第三方根 CA (包括 GS Root R3 CA)。

如何取得有關這項遷移程序的最新消息?

在公開的問題 67842936 加上星號,即可取得相關最新消息。我們在遷移程序期間,如遇到任何大家可能會有興趣的主題,也會更新這份常見問題清單。

我們使用多項 Google 服務,這些服務會受到根 CA 遷移的影響嗎?

會,所有 Google 服務和 API 都將進行根 CA 遷移,但時程可能因服務而異。不過別擔心,只要您讓應用程式信任 Google 範例 PEM 檔案中列出的建議相關根憑證,這些應用程式在根憑證遷移期間就會維持已驗證狀態,可以順利呼叫各項 Google API 或服務。詳情請參閱「我應該要安裝 Google 範例 PEM 檔案中的所有根憑證嗎?」這個常見問題。

如何判斷我的憑證存放區是否需要更新

GTS 網站上列的各個根 CA 憑證,透過測試端點測試您的應用程式環境。 如果您的應用程式能與 GS Root R2 測試端點Google 憑證測試沙箱成功建立傳輸層安全標準 (TLS) 連線,代表到 2018 年底前都不用進行其他驗證。

因此,我們極力建議您安裝 Google 範例 PEM 檔案中的所有憑證,確保未來能順利使用;除非您確定自己能持續管理實際執行環境的安全性,確保其為最新狀態且已修補所有問題。

有沒有什麼簡單的工具能讓用來我驗證憑證存放區?

大多數平台都會提供指令列工具 curl,其中有許多能用來測試環境設定的功能。想瞭解如何取得 curl,請參閱「取得 curl」一節的操作說明。

測試預設的憑證存放區
# Google certificate test sandbox
$ curl -vvI https://cert-test.sandbox.google.com/
# GS Root R2
$ curl -vvI https://good.gsr2demo.pki.goog/
# GS Root R4
$ curl -vvI https://good.gsr4demo.pki.goog/
# GS Root R3
$ curl -vvI https://valid.r3.roots.globalsign.com/
# GTS Root R1
$ curl -vvI https://good.r1demo.pki.goog/
# GTS Root R2
$ curl -vvI https://good.r2demo.pki.goog/
# GTS Root R3
$ curl -vvI https://good.r3demo.pki.goog/
# GTS Root R4
$ curl -vvI https://good.r4demo.pki.goog/
$ openssl s_client -connect maps.googleapis.com:443 -showcerts </dev/null 2>/dev/null
$ openssl s_client -connect cert-test.sandbox.google.com:443 -showcerts </dev/null 2>/dev/null
驗證 Google 根 CA 組合
下載 Google 範例 PEM 檔案,然後按照下列步驟操作:
# Google certificate test sandbox
$ curl -vvI --cacert roots.pem https://cert-test.sandbox.google.com/
# GS Root R2
$ curl -vvI --cacert roots.pem https://good.gsr2demo.pki.goog/
# GS Root R4
$ curl -vvI --cacert roots.pem https://good.gsr4demo.pki.goog/
# GS Root R3
$ curl -vvI --cacert roots.pem https://valid.r3.roots.globalsign.com/
# GTS Root R1
$ curl -vvI --cacert roots.pem https://good.r1demo.pki.goog/
# GTS Root R2
$ curl -vvI --cacert roots.pem https://good.r2demo.pki.goog/
# GTS Root R3
$ curl -vvI --cacert roots.pem https://good.r3demo.pki.goog/
# GTS Root R4
$ curl -vvI --cacert roots.pem https://good.r4demo.pki.goog/
$ openssl s_client -CAfile roots.pem -connect maps.googleapis.com:443 -showcerts </dev/null 2>/dev/null
$ openssl s_client -CAfile roots.pem -connect cert-test.sandbox.google.com:443 -showcerts </dev/null 2>/dev/null

遷移作業將如何進行?

什麼時候執行遷移作業?

遷移程序的第一階段為改用中繼 CA 核發的憑證 (錨定於 GS Root R2),已於 2017 年下半年開始,並於 2018 年上半年完成。

後續遷移階段的作業時程將於近幾年公布,我們會在 GS Root R2 2021 憑證到期前「提早公告」

各項 Google 服務的正式推出計畫

  • 各項服務將分階段推出,並先從單一資料中心開始。
  • 接著陸續往外擴大,直到涵蓋全球各地的資料中心。
  • 如果在任何階段偵測到重大問題,測試作業就會暫時復原,直到問題解決為止。
  • 以先前的疊代作業輸入內容為準,推出時會涵蓋進一步的 Google 服務,然後再逐步將所有 Google 服務遷移到新憑證。

受影響的對象、時間和區域為何?

隨著有越來越多資料中心完成遷移,Google 地圖平台的開發人員也會開始收到新憑證。這類變更有些可能會本地化,因為用戶端要求通常會就近轉送至附近的伺服器。不過,我們無法預先確認受影響的對象、時間和地點,因此建議所有客戶在 Google Root CA 遷移的下一個階段開始之前,提前全面驗證系統。

注意事項

如果用戶端未設定必要的根憑證,就無法驗證與 Google 地圖平台的傳輸層安全標準 (TLS) 連線。在這種情況下,用戶端通常會發出憑證驗證失敗的警告。視其傳輸層安全標準 (TLS) 的設定而定,用戶端可能會持續發出 Google 地圖平台要求,或拒絕繼續執行要求。

傳輸層安全標準 (TLS) 用戶端與 Google 地圖平台通訊的最低需求為何?

詳情請參閱 GTS 常見問題中的「透過傳輸層安全標準 (TLS)用戶端與 Google 通訊的建議最低需求為何?」

Google 地圖平台未規定任何額外的需求。

哪類型應用程式服務會有中斷的風險?

目前使用系統憑證存放區,但未執行任何開發人員限制的應用程式

Google 地圖平台網路服務應用程式

如果您使用的是有持續維護且定期更新的主流作業系統 (例如 Ubuntu、Red Hat、Windows 7 以上版本或 Server 2008 以上版本、OS X),則預設的憑證存放區中應該已經具備 GS Root R2 憑證。

如果您使用的是不會再收到更新的舊版作業系統,就不一定會有 GS Root R2 憑證。舉例來說,Windows XP SP2 內含憑證,Windows XP SP1 則不含憑證。請測試舊版裝置,確認其信任這些憑證。

針對直接從使用者裝置呼叫 Google 地圖平台網路服務的行動應用程式,請參閱「行動應用程式是否會有中斷的風險?」這個常見問題的指示說明。

用戶端 Google 地圖平台應用程式

一般來說,Google Maps JavaScript API 應用程式會採用執行應用程式的網路瀏覽器的根憑證。詳情請參閱「Google Maps JavaScript API 應用程式是否會有中斷的風險?」部分。

針對使用 Google Maps SDK 或 Places SDK 的 Android 和 iOS 原生行動應用程式,呼叫 Google 地圖平台網路服務的應用程式也適用同樣的規則。

詳情請參閱「行動應用程式是否會有中斷的風險?」這個常見問題。

使用自己的憑證組合或採用進階安全性功能 (例如憑證綁定功能) 的應用程式

請務必自行更新憑證組合。如「我應該要安裝 Google 範例 PEM 檔案中的所有根憑證嗎?」這個常見問題所述,我們建議您將 Google 範例 PEM 檔案中的所有憑證都匯到您的憑證存放區。

如果您要針對應用程式會連線的 Google 網域綁定憑證或公開金鑰,則應將憑證和公開金鑰加進應用程式信任的實體清單中。

有關綁定憑證或公開金鑰的詳細資訊,請參閱「需要更多資訊嗎?」一節提供的外部資源。

我應該要安裝 Google 範例 PEM 檔案中的所有根憑證嗎?

如果您想要一次處理好系統的驗證問題,特別是當您並未經常對系統定期套用作業系統更新,或者您是自己維護應用程式的憑證組合,我們會建議您安裝 Google 範例 PEM 檔案中的所有憑證。

為何我不應安裝任何中繼 CA 憑證?

建議您只安裝 Google 範例 PEM 檔案中列的根憑證,並透過這些根憑證來驗證整個錨定憑證鏈的可靠性。上述原則同樣適用於個別伺服器憑證 (例如由主機 maps.googleapis.com 提供的憑證),以及 Google 的任何中繼 CA (例如 GIAG3、GTS CA 1O1 或 GIAG4)。

只要根憑證授權單位受到信任,則任何新式的傳輸層安全標準 (TLS) 程式庫就能自動驗證這類信任鏈。

Google Maps JavaScript API 應用程式是否會有中斷的風險?

GlobalSign R2 根 CA 已順利嵌入,且受到大部分新式瀏覽器的信任。 因此,短期內這些瀏覽器仍會繼續連線到 Google 服務。此外,只要瀏覽器都是在主動維護的狀態下,則幾乎可以確定瀏覽器在短時間內也會支援所有其他 Google 根 CA。

不過,Google Maps JavaScript API 本身只能在支援的瀏覽器上運作,因此建議您選用清單中列的瀏覽器,並確保使用的是最新版本,以免遇到問題。

行動應用程式是否會有中斷的風險?

如果 Android 和 Apple 裝置會持續收到裝置製造商發布的定期更新,就不需要擔心日後的驗證問題。大多數舊版 Android 手機型號都已內含至少 GS Root R2 和 GS Root R3 這兩項憑證,不過信任的憑證清單可能因手機製造商、裝置型號和 Android 版本而有所不同。根據預設,Google Nexus 和 Pixel 品牌裝置採用的 Android 開放原始碼計畫 (AOSP) 新版本也會信任 GS Root R4。目前已發布的 Android 版本對 GTS 根 CA 仍只有最低限度的支援。

針對 iOS 裝置,Apple 會在自家支援頁面中,提供各個最新 iOS 版本信任的根 CA 清單。不過,所有 iOS 5 以上的版本都支援 GS Root R2 和 R3,而 7 以上的版本還支援 GS Root R4。截至本文撰寫時間為止,iOS 和最新的 Android 版本一樣,也還未支援 GTS 根 CA。

詳情請參閱「如何查看手機上信任的根憑證?」一節。

我的瀏覽器或作業系統何時會納入 Google Trust Services 的根憑證?

Google 目前已與各大主要第三方合作,共同維護廣泛使用的受信任根憑證組合。第三方包括作業系統製造商 (例如 Apple 和 Microsoft 及 Google 自家的 Android 和 ChromeOS 團隊)、瀏覽器開發人員 (例如 Mozilla、Apple、Microsoft 及 Google 的 Chrome 團隊),以及硬體製造商 (例如手機、機上盒、電視、遊戲主機、印表機) 等等。

在大多數情況下,第三方憑證的納入時程並非 Google 所能控制,我們只能建議您務必定期套用可用的系統更新。有些第三方 (例如「Mozilla 的 CA 憑證計畫」) 可能會記錄自己的憑證納入時程表

疑難排解

我可以在哪裡取得需要的工具?

取得 curl

如果您的作業系統發布版本未提供 curl,則可從 https://curl.haxx.se/ 下載;看您是要下載原始碼並自行編譯工具,或下載預先編譯的二進位檔 (如果有平台可用的檔案) 都可以。

取得 OpenSSL

如果您的作業系統發布版本未提供 openssl,則可從 https://www.openssl.org/ 下載原始碼並編譯工具。您可以前往 https://www.openssl.org/community/binary.html 查看第三方建構的二進位檔清單。不過請注意,OpenSSL 團隊並未以任何方式支援這些版本,亦不為其背書。

取得 Wireshark 和 tcpdump

雖然大部分的 Linux 發行版本都會提供這兩項工具,但您也可以在 https://www.wireshark.org 取得適用其他作業系統的 wireshark 預先編譯版本。https://www.tcpdump.org 上則有 tcpdump 和 LibPCAP 的原始碼。

取得 Java keytool

每個 Java Development Kit (JDK) 或 Java Runtime Environment (JRE) 版本都會隨附 keytool 指令列工具,安裝即可取得 keytool.。不過,除非您是使用 Java 建構應用程式,否則進行根憑證驗證不太可能需要用到 keytool

如果在實際執行環境中發生中斷,應如何處理?

您主要應採取的行動是將 Google 範例 PEM 檔案中的所有必要憑證,都安裝到應用程式使用的憑證信任存放區。不過,您還是可以參考「管理信任的憑證」部分,可能會有您需要的實用資訊。
  1. 與系統管理員合作,升級本機憑證存放區。
  2. 參閱這份常見問題清單,找出適用您系統的操作說明。
  3. 如果您需要進一步的平台或系統相關協助,請與系統供應商提供的技術支援管道聯絡。
  4. 如需一般協助,請與支援團隊聯絡 (詳情請參閱「與 Google 地圖平台支援團隊聯絡」一節)。
  5. 在公開的問題 67842936 加上星號,以便取得有關遷移的最新消息。

與 Google 地圖平台支援團隊聯絡

基本疑難排解

如需一般疑難排解指引,請參閱「如何判斷我的憑證存放區是否需要更新?」這個問題的說明。

想知道如何匯入/匯出根憑證,「管理信任的憑證」一節也可能會有一些實用的資訊。

如果問題還是無法解決,而您決定聯絡 Google 地圖平台支援團隊,請另外備妥以下資訊:

  1. 受影響的伺服器位於哪裡?
  2. 您的服務是呼叫哪個 Google IP 位址?
  3. 哪些 API 受到這個問題的影響?
  4. 問題是從何時開始出現 (確切的時間點)?
  5. 下列指令的輸出內容:
    # Google Maps Platform service
    $ curl -vvI https://maps.googleapis.com/
    # Google Search site
    $ curl -vvI https://www.google.com/
    # Google certificate test sandbox
    $ curl -vvI https://cert-test.sandbox.google.com/
    # GS Root R2
    $ curl -vvI https://good.gsr2demo.pki.goog/
    # GS Root R3
    $ curl -vvI https://valid.r3.roots.globalsign.com/
    # GTS Root R1
    $ curl -vvI https://good.r1demo.pki.goog/
    $ openssl s_client -connect maps.googleapis.com:443 -showcerts </dev/null 2>/dev/null
    $ openssl s_client -connect cert-test.sandbox.google.com:443 -showcerts </dev/null 2>/dev/null
    

想瞭解如何取得這些必要工具,請參閱「我可以在哪裡取得需要的工具?」這個常見問題的說明。

如何找出我的 DNS 公開位址?

在 Linux 中,您可以執行以下指令:
dig -t txt o-o.myaddr.l.google.com
在 Windows 中,您可以在互動式模式下使用 nslookup:
C:\> nslookup -
set type=TXT
o-o.myaddr.l.google.com

如何正確解讀 curl 輸出內容並確保結果可靠?

執行具有 -vvI 旗標的 curl 可產生非常實用的資訊,以下說明如何解讀輸出內容:
  • 以「*」為開頭的程式碼行 - 顯示傳輸層安全標準 (TLS) 交涉的輸出內容及連線終止資訊。
  • 以「>」開頭的程式碼行 - 顯示 curl 傳送的外送 HTTP 要求。
  • 以「<」開頭的程式碼行 - 顯示伺服器傳回的 HTTP 回應。
  • 通訊協定為 HTTPS 時,出現「>」或「<」程式碼行 - 表示傳輸層安全標準 (TLS) 握手成功。
使用傳輸層安全標準 (TLS) 程式庫和根憑證組合

執行具有 -vvI 旗標的 curl 時,也可產生使用的憑證存放區,但實際的輸出內容可能因系統而異 (如下所示)。

針對 curl 連結 NSS 的 Red Hat Linux 機器,輸出內容會包含下列程式碼行:

* Initializing NSS with certpath: sql:/etc/pki/nssdb
* CAfile: /etc/pki/tls/certs/ca-bundle.crt
  CApath: none

Ubuntu 或 Debian Linux 機器的輸出內容可能包含這些程式碼行:

* successfully set certificate verify locations:
* CAfile: none
  CApath: /etc/ssl/certs

針對使用指定 Google 根憑證 PEM 檔案並含有 --cacert 旗標的 Ubuntu 或 Debian Linux 機器,輸出內容可能包含以下程式碼行:

* successfully set certificate verify locations:
* CAfile: /home/<username>/Downloads/roots.pem
  CApath: /etc/ssl/certs
使用者代理程式

包含「User-Agent」標頭的外送要求可能會提供有關 curl 和您系統的實用資訊。

Red Hat Linux 機器的範例:

> HEAD / HTTP/1.1
> User-Agent: curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.27.1 zlib/1.2.3 libidn/1.18 libssh2/1.4.2
> Host: cert-test.sandbox.google.com
> Accept: */*
>
傳輸層安全標準 (TLS) 握手失敗
類似下方的程式碼行指出,連線因不受信任的伺服器憑證而在傳輸層安全標準 (TLS) 握手期間遭到終止。缺少以「>」或「<」開頭的偵錯輸出內容,也是嘗試連線失敗的重要跡象。
* SSLv3, TLS alert, Server hello (2):
* SSL certificate problem: unable to get local issuer certificate
* Closing connection 0
傳輸層安全標準 (TLS) 握手成功
出現類似以下的程式碼行時,代表傳輸層安全標準 (TLS) 握手成功。輸出內容應會列出用於加密連線的加密套件,以及已接受的伺服器憑證的詳細資料。此外,如果有以「>」或「<」開頭的程式碼行,代表系統已成功透過傳輸層安全標準 (TLS) 加密連線,傳輸酬載 HTTP 流量:
* TLSv1.3 (OUT), TLS handshake, Finished (20):
* SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
* ALPN, server accepted to use h2
* Server certificate:
*  subject: C=US; ST=California; L=Mountain View; O=Google LLC; CN=*.googleapis.com
*  start date: Jul 29 17:24:40 2019 GMT
*  expire date: Oct 27 17:24:40 2019 GMT
*  subjectAltName: host "maps.googleapis.com" matched cert's "*.googleapis.com"
*  issuer: C=US; O=Google Trust Services; CN=GTS CA 1O1
*  SSL certificate verify ok.
> HEAD / HTTP/1.1
> User-Agent: curl/7.64.0
> Host: maps.googleapis.com
> Accept: */*
>
< HTTP/1.1 302 Found
如何以使用者可理解的格式列印收到的伺服器憑證?
假如輸出結果是 PEM 格式 (例如來自 openssl s_client ... -showcerts 的輸出),請按照以下步驟列印已提供的憑證:
  1. 複製完整的 Base 64 編碼憑證,「包含」標頭和頁尾:
    -----BEGIN CERTIFICATE-----
    ...
    -----END CERTIFICATE-----
    
  2. openssl x509 -inform pem -noout -text
    
  3. 將複製緩衝區的內容貼到終端機。
  4. 按下 Return 鍵。
如需輸入和輸出範例,請參閱下文的「如何以使用者可理解的格式列印 PEM 憑證?」。

OpenSSL 中的 Google 憑證看起來會怎樣?

錨定於 GlobalSign Root CA - R2 的新憑證

Certificate chain
 0 s:C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.googleapis.com
   i:C = US, O = Google Trust Services, CN = GTS CA 1O1
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
 1 s:C = US, O = Google Trust Services, CN = GTS CA 1O1
   i:OU = GlobalSign Root CA - R2, O = GlobalSign, CN = GlobalSign
-----BEGIN CERTIFICATE-----
...
-----END CERTIFICATE-----
---
Server certificate
subject=C = US, ST = California, L = Mountain View, O = Google LLC, CN = *.googleapis.com

issuer=C = US, O = Google Trust Services, CN = GTS CA 1O1

管理信任的憑證

如何查看手機上信任的根憑證?

Android 信任的憑證

如「行動應用程式是否會有中斷的風險?」這個常見問題所述,自 Android 4.0 版起,手機使用者可以驗證「設定」底下所列的信任憑證清單。下表有確切的「設定」選單路徑:

Android 版本 選單路徑
1.x、2.x、3.x 不適用
4.x、5.x、6.x、7.x [設定] > [安全性] > [信任的憑證]
8.x、9 [設定] > [安全性與位置資訊] > [加密和憑證] > [信任的憑證]
10 [設定] > [安全性] > [進階] > [加密和憑證] > [信任的憑證]

下表按各 Android 版本列出最重要的根憑證「可能」的適用情況,其以目前可用的 Android 虛擬裝置 (AVD) 系統映像檔進行手動驗證;一旦無法繼續取得系統映像檔,就會改回採用 Android 開放原始碼計畫的 CA 憑證 Git 存放區版本記錄。

Android 版本 GS Root R2 GS Root R3 GS Root R4 GTS
2.3、3.2、4.x、5.0
5.1、6.x、7.x、8.x、9
10

一般來說,如果不更新韌體或取得裝置的 Root 權限,就無法更新 Android 系統的憑證存放區。不過,以仍廣為使用的大部分 Android 版本來說,目前的信任根憑證組合「可能」還可以繼續提供好幾年不中斷的服務,甚至比目前多數現有裝置的生命週期更長。

從版本 7.0 開始,Android 可讓應用程式開發人員透過安全的方式,只新增受其應用程式信任的憑證。方法是綁定憑證與應用程式,並建立自訂的網路安全性設定,詳情請參閱「網路安全性設定」訓練說明文件,瞭解 Android 的安全性與隱私權最佳做法。

不過,如果是來自 Google Play 服務 APK 的流量,第三方應用程式開發人員就無法影響其網路設定,因此這只能算是局部性的因應做法。

在版本較舊的裝置上,您唯一可以採用的選項是由使用者新增的 CA (包括將公司群組政策套用至使用者裝置時安裝的 CA,或由使用者自行安裝的 CA)。

iOS 信任存放區

雖然 Apple 並未直接對手機使用者顯示預設的信任根憑證組合,但該公司已針對 iOS 5 以上的版本提供信任根 CA 組合連結。您也可以在「iOS 中可用的信任根憑證清單」及「iOS 5 和 iOS 6:可用的信任根憑證清單」這些 Apple 支援文章中找到相關資訊。

不過在 iOS 裝置上安裝的其他憑證,都會顯示在 [設置] > [一般] > [設定檔] 下。如果未安裝其他憑證,「設定檔」選單可能就不會顯示。

下表根據上述來源,按各 iOS 版本列出最重要的根憑證的適用情況:

iOS 版本 GS Root R2 GS Root R3 GS Root R4 GTS
5、6
7、8、9、10、11、12.0
12.1.3+

我的系統憑證會存放在哪裡?如何更新?

預設憑證存放區的位置視作業系統及安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 程式庫而有所不同。但是在大部分的 Linux 發行版本中,您可以在下列其中一個路徑中找到預設的根憑證:/usr/local/share/ca-certificates (Debian、Ubuntu、較舊的 RHEL 和 CentOS 版本)、/etc/pki/ca-trust/source/anchors/usr/share/pki/ca-trust-source (Fedora、較新的 RHEL 和 CentOS 版本) 或 /var/lib/ca-certificates (OpenSUSE)。其他憑證路徑可能包含 /etc/ssl/certs (Debian、Ubuntu) 或 /etc/pki/tls/certs (RHEL、CentOS)。這些目錄中有某些憑證可能是指向其他目錄中的檔案的符號連結。

OpenSSL

針對使用 OpenSSL 的應用程式,您可以透過下列指令查看已安裝元件的設定位置,包括「預設的憑證存放區」
openssl version -d
這個指令會輸出 OPENSSLDIR,其對應至程式庫的頂層目錄,而您可在下方找到程式庫設定:
OPENSSLDIR: "/usr/lib/ssl"
憑證存放區位於 certs 子目錄中。
$ ls -l /usr/lib/ssl/certs
lrwxrwxrwx 1 root root 14 Feb 13  2017 /usr/lib/ssl/certs -> /etc/ssl/certs
$ ls -l /etc/ssl/certs
…
-rw-r--r-- 1 root root 212177 Sep  5 00:45 ca-certificates.crt
…
lrwxrwxrwx 1 root root     62 Sep  5 00:39 GlobalSign_Root_CA_-_R2.pem -> /usr/share/ca-certificates/mozilla/GlobalSign_Root_CA_-_R2.crt
…

如果 OpenSSL 和上述範例一樣,都採用預設的系統憑證存放區,請參閱最上方部分「我的系統憑證會存放在哪裡?如何更新?」,確保系統根憑證組合是最新版本。

想瞭解如何取得 openssl,請參閱「取得 OpenSSL」一節的操作說明。

Mozilla NSS

根據預設,使用 Mozilla NSS 的應用程式也可能使用全系統層級的憑證資料庫 (通常位於 /etc/pki/nssdb 底下,或使用者專屬的預設存放區 ${HOME}/.pki/nssdb 底下)。如要更新 NSS,請參閱 certutil 工具說明文件及官方作業系統說明文件,瞭解如何新增憑證。

Microsoft .NET

Windows .NET 開發人員在下列 Microsoft 文章中,也可找到與更新憑證存放區有關的實用資訊:

Java

Java 應用程式「可能」使用自己專屬的憑證存放區,而其在 Linux 系統中通常位於 /etc/pki/java/cacerts/usr/share/ca-certificates-java。請參閱以下 Stack Overflow 和 Oracle 文章,瞭解如何使用 Oracle keytool 指令列工具更新 Java 憑證存放區:

什麼是 PEM 檔案?

隱私強化郵件 (PEM) 實際上是一種用於儲存和傳送加密編譯憑證、金鑰的標準文字檔案格式,而其制式標準格式為 RFC 7468

雖然檔案格式本身為使用者可理解的格式,但 Base64 編碼的二進位檔憑證資料則不是。不過,PEM 規格允許在文字編碼的憑證內文之前或之後,插入說明文字;有許多工具也都利用此功能,針對憑證中最相關的資料元素以明文提供摘要說明。

工具 (例如 openssl) 也可用來將整個憑證解碼為使用者可理解的形式。詳情請參閱「如何以使用者可理解的格式列印 PEM 憑證?」一節。

什麼是「.crt」檔案?

允許以 PEM 格式匯出憑證的工具,通常會採用「.crt」副檔名來指出該檔案使用了文字編碼功能。

什麼是 DER 檔案?

唯一編碼規則 (DER) 是編碼憑證的標準二進位格式。PEM 檔案中的憑證通常是 Base64 編碼的 DER 憑證。

什麼是「.cer」檔案?

具有「.cer」字尾的已匯出檔案「可能」會包含 PEM 編碼的憑證,但比較常見的是二進位的 DER 編碼憑證。根據慣例,「.cer」檔案通常只包含單一憑證。

我的系統拒絕匯入來自 roots.pem 的所有憑證

部分系統只接受匯入包含單一憑證的 PEM 檔案。請參閱下文「如何從 roots.pem 擷取個別憑證?」這個常見問題的說明,瞭解如何分割檔案。

如何從 roots.pem 擷取個別憑證?

您可以使用下列簡單的 bash 指令碼,將 roots.pem 分割為其元件憑證:
csplit -z -f roots.pem. roots.pem '/-----END CERTIFICATE-----/+1' '{*}' &>/dev/null &&\
for f in roots.pem.*;\
  do mv "${f}"\
    $(printf %b $(openssl x509 -in ${f} -noout -issuer|sed -e 's/"//g'|sed -e 's#/#_#g')).pem;\
done
這樣就能建立一些類似下列項目的個別 PEM 檔案:
issuer=C=BE,O=GlobalSignnv-sa,OU=RootCA,CN=GlobalSignRootCA.pem
issuer=C=GB,ST=GreaterManchester,L=Salford,O=ComodoCALimited,CN=AAACertificateServices.pem
issuer=C=GB,ST=GreaterManchester,L=Salford,O=COMODOCALimited,CN=COMODOCertificationAuthority.pem
issuer=C=GB,ST=GreaterManchester,L=Salford,O=COMODOCALimited,CN=COMODOECCCertificationAuthority.pem
issuer=C=GB,ST=GreaterManchester,L=Salford,O=COMODOCALimited,CN=COMODORSACertificationAuthority.pem
issuer=C=IE,O=Baltimore,OU=CyberTrust,CN=BaltimoreCyberTrustRoot.pem
issuer=C=SE,O=AddTrustAB,OU=AddTrustExternalTTPNetwork,CN=AddTrustExternalCARoot.pem
issuer=C=US,O=AffirmTrust,CN=AffirmTrustCommercial.pem
issuer=C=US,O=AffirmTrust,CN=AffirmTrustNetworking.pem
issuer=C=US,O=AffirmTrust,CN=AffirmTrustPremiumECC.pem
issuer=C=US,O=AffirmTrust,CN=AffirmTrustPremium.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertAssuredIDRootCA.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertAssuredIDRootG2.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertAssuredIDRootG3.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertGlobalRootCA.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertGlobalRootG2.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertGlobalRootG3.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertHighAssuranceEVRootCA.pem
issuer=C=US,O=DigiCertInc,OU=www.digicert.com,CN=DigiCertTrustedRootG4.pem
issuer=C=US,O=Entrust,Inc.,OU=Seewww.entrust.net_legal-terms,OU=(c)2009Entrust,Inc.-forauthorizeduseonly,CN=EntrustRootCertificationAuthority-G2.pem
issuer=C=US,O=Entrust,Inc.,OU=Seewww.entrust.net_legal-terms,OU=(c)2012Entrust,Inc.-forauthorizeduseonly,CN=EntrustRootCertificationAuthority-EC1.pem
issuer=C=US,O=Entrust,Inc.,OU=www.entrust.net_CPSisincorporatedbyreference,OU=(c)2006Entrust,Inc.,CN=EntrustRootCertificationAuthority.pem
issuer=C=US,O=GeoTrustInc.,CN=GeoTrustGlobalCA.pem
issuer=C=US,O=GoogleTrustServicesLLC,CN=GTSRootR1.pem
issuer=C=US,O=GoogleTrustServicesLLC,CN=GTSRootR2.pem
issuer=C=US,O=GoogleTrustServicesLLC,CN=GTSRootR3.pem
issuer=C=US,O=GoogleTrustServicesLLC,CN=GTSRootR4.pem
issuer=C=US,O=StarfieldTechnologies,Inc.,OU=StarfieldClass2CertificationAuthority.pem
issuer=C=US,O=TheGoDaddyGroup,Inc.,OU=GoDaddyClass2CertificationAuthority.pem
issuer=C=US,ST=Arizona,L=Scottsdale,O=GoDaddy.com,Inc.,CN=GoDaddyRootCertificateAuthority-G2.pem
issuer=C=US,ST=Arizona,L=Scottsdale,O=StarfieldTechnologies,Inc.,CN=StarfieldRootCertificateAuthority-G2.pem
issuer=C=US,ST=NewJersey,L=JerseyCity,O=TheUSERTRUSTNetwork,CN=USERTrustECCCertificationAuthority.pem
issuer=C=US,ST=NewJersey,L=JerseyCity,O=TheUSERTRUSTNetwork,CN=USERTrustRSACertificationAuthority.pem
issuer=O=Cybertrust,Inc,CN=CybertrustGlobalRoot.pem
issuer=O=Entrust.net,OU=www.entrust.net_CPS_2048incorp.byref.(limitsliab.),OU=(c)1999Entrust.netLimited,CN=Entrust.netCertificationAuthority(2048).pem
issuer=OU=GlobalSignECCRootCA-R4,O=GlobalSign,CN=GlobalSign.pem
issuer=OU=GlobalSignECCRootCA-R5,O=GlobalSign,CN=GlobalSign.pem
issuer=OU=GlobalSignRootCA-R2,O=GlobalSign,CN=GlobalSign.pem
issuer=OU=GlobalSignRootCA-R3,O=GlobalSign,CN=GlobalSign.pem
issuer=OU=GlobalSignRootCA-R6,O=GlobalSign,CN=GlobalSign.pem
roots.pem
接著,可將 PEM 檔案 issuer=….pem 個別匯入,或進一步轉換為憑證存放區可接受的檔案格式。

我系統支援的格式及 PEM 檔案格式兩者如何轉換?

OpenSSL 工具包的指令列工具 openssl 可用來轉檔 (常用的憑證檔案格式可互相轉換)。以下提供如何從 PEM 檔案轉換為常用憑證檔案格式的操作說明。

如需可用選項的完整清單,請參閱官方提供的 OpenSSL 指令列公用程式說明文件

想瞭解如何取得 openssl,請參閱「取得 OpenSSL」一節的操作說明。

如何將 PEM 檔案轉換為 DER 格式?

您可以使用 openssl 發出以下指令,將檔案從 PEM 轉換為 DER:
openssl x509 -in roots.pem -outform der -out roots.der

如何將 PEM 檔案轉換為 PKCS #7?

您可以使用 openssl 發出以下指令,將檔案從 PEM 轉換成 PKCS #7:
openssl crl2pkcs7 -nocrl -certfile roots.pem -out roots.p7b

如何將 PEM 檔案轉換為 PKCS #12 (PFX)?

您可以使用 openssl 發出以下指令,將檔案從 PEM 轉換成 PKCS #12:
openssl pkcs12 -export -info -in roots.pem -out roots.p12 -nokeys

建立 PKCS #12 封存時,您必須提供檔案密碼;如果不打算立即將 PKCS #12 檔案匯入系統,請務必妥善保管密碼。

如何將 NSS 憑證存放區中的憑證匯出為 PEM 檔案?

查看 Mozilla NSS certutil 工具的說明文件,以及 Red Hat 社群網站上有關「將憑證從 cert8.db 匯出為 .pem 檔案」的討論。

如何以使用者可理解的格式列印 PEM 憑證?

在下列範例中,我們假設 GlobalSign_Root_CA_-_R2.pem 檔案已包含下列內容:
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
-----END CERTIFICATE-----

使用 OpenSSL 列印憑證

發出指令
openssl x509 -in GlobalSign_Root_CA_-_R2.pem -text
應會在憑證之前輸出以下程式碼行:
Certificate:
    Data:
        Version: 3 (0x2)
        Serial Number:
            04:00:00:00:00:01:0f:86:26:e6:0d
    Signature Algorithm: sha1WithRSAEncryption
        Issuer: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign
        Validity
            Not Before: Dec 15 08:00:00 2006 GMT
            Not After : Dec 15 08:00:00 2021 GMT
        Subject: OU=GlobalSign Root CA - R2, O=GlobalSign, CN=GlobalSign
        Subject Public Key Info:
            Public Key Algorithm: rsaEncryption
                Public-Key: (2048 bit)
                Modulus:
                    00:a6:cf:24:0e:be:2e:6f:28:99:45:42:c4:ab:3e:
                    21:54:9b:0b:d3:7f:84:70:fa:12:b3:cb:bf:87:5f:
                    c6:7f:86:d3:b2:30:5c:d6:fd:ad:f1:7b:dc:e5:f8:
                    60:96:09:92:10:f5:d0:53:de:fb:7b:7e:73:88:ac:
                    52:88:7b:4a:a6:ca:49:a6:5e:a8:a7:8c:5a:11:bc:
                    7a:82:eb:be:8c:e9:b3:ac:96:25:07:97:4a:99:2a:
                    07:2f:b4:1e:77:bf:8a:0f:b5:02:7c:1b:96:b8:c5:
                    b9:3a:2c:bc:d6:12:b9:eb:59:7d:e2:d0:06:86:5f:
                    5e:49:6a:b5:39:5e:88:34:ec:bc:78:0c:08:98:84:
                    6c:a8:cd:4b:b4:a0:7d:0c:79:4d:f0:b8:2d:cb:21:
                    ca:d5:6c:5b:7d:e1:a0:29:84:a1:f9:d3:94:49:cb:
                    24:62:91:20:bc:dd:0b:d5:d9:cc:f9:ea:27:0a:2b:
                    73:91:c6:9d:1b:ac:c8:cb:e8:e0:a0:f4:2f:90:8b:
                    4d:fb:b0:36:1b:f6:19:7a:85:e0:6d:f2:61:13:88:
                    5c:9f:e0:93:0a:51:97:8a:5a:ce:af:ab:d5:f7:aa:
                    09:aa:60:bd:dc:d9:5f:df:72:a9:60:13:5e:00:01:
                    c9:4a:fa:3f:a4:ea:07:03:21:02:8e:82:ca:03:c2:
                    9b:8f
                Exponent: 65537 (0x10001)
        X509v3 extensions:
            X509v3 Key Usage: critical
                Certificate Sign, CRL Sign
            X509v3 Basic Constraints: critical
                CA:TRUE
            X509v3 Subject Key Identifier:
                9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E
            X509v3 CRL Distribution Points:

                Full Name:
                  URI:http://crl.globalsign.net/root-r2.crl

            X509v3 Authority Key Identifier:
                keyid:9B:E2:07:57:67:1C:1E:C0:6A:06:DE:59:B4:9A:2D:DF:DC:19:86:2E

    Signature Algorithm: sha1WithRSAEncryption
         99:81:53:87:1c:68:97:86:91:ec:e0:4a:b8:44:0b:ab:81:ac:
         27:4f:d6:c1:b8:1c:43:78:b3:0c:9a:fc:ea:2c:3c:6e:61:1b:
         4d:4b:29:f5:9f:05:1d:26:c1:b8:e9:83:00:62:45:b6:a9:08:
         93:b9:a9:33:4b:18:9a:c2:f8:87:88:4e:db:dd:71:34:1a:c1:
         54:da:46:3f:e0:d3:2a:ab:6d:54:22:f5:3a:62:cd:20:6f:ba:
         29:89:d7:dd:91:ee:d3:5c:a2:3e:a1:5b:41:f5:df:e5:64:43:
         2d:e9:d5:39:ab:d2:a2:df:b7:8b:d0:c0:80:19:1c:45:c0:2d:
         8c:e8:f8:2d:a4:74:56:49:c5:05:b5:4f:15:de:6e:44:78:39:
         87:a8:7e:bb:f3:79:18:91:bb:f4:6f:9d:c1:f0:8c:35:8c:5d:
         01:fb:c3:6d:b9:ef:44:6d:79:46:31:7e:0a:fe:a9:82:c1:ff:
         ef:ab:6e:20:c4:50:c9:5f:9d:4d:9b:17:8c:0c:e5:01:c9:a0:
         41:6a:73:53:fa:a5:50:b4:6e:25:0f:fb:4c:18:f4:fd:52:d9:
         8e:69:b1:e8:11:0f:de:88:d8:fb:1d:49:f7:aa:de:95:cf:20:
         78:c2:60:12:db:25:40:8c:6a:fc:7e:42:38:40:64:12:f7:9e:
         81:e1:93:2e

想瞭解如何取得 openssl,請參閱「取得 OpenSSL」一節的操作說明。

使用 Java keytool 列印憑證

發出以下指令
keytool -printcert -file GlobalSign_Root_CA_-_R2.pem
應會出現下列輸出內容:
Owner: CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2
Issuer:
CN=GlobalSign, O=GlobalSign, OU=GlobalSign Root CA - R2
Serial number:
400000000010f8626e60d
Valid from: Fri Dec 15 09:00:00 CET 2006 until: Wed Dec 15
09:00:00 CET 2021
Certificate fingerprints:
   MD5:
94:14:77:7E:3E:5E:FD:8F:30:BD:41:B0:CF:E7:D0:30
   SHA1:
75:E0:AB:B6:13:85:12:27:1C:04:F8:5F:DD:DE:38:E4:B7:24:2E:FE
   SHA256:
CA:42:DD:41:74:5F:D0:B8:1E:B9:02:36:2C:F9:D8:BF:71:9D:A1:BD:1B:1E:FC:94:6F:5B:4C:99:F4:2C:1B:9E
   Signature algorithm name: SHA1withRSA
   Version: 3

Extensions:

#1:
ObjectId: 2.5.29.35 Criticality=false
AuthorityKeyIdentifier [
KeyIdentifier [
0000: 9B E2 07 57 67 1C 1E C0   6A 06 DE 59 B4 9A 2D DF  ...Wg...j..Y..-.
0010:
DC 19 86 2E                                        ....
]
]

#2: ObjectId:
2.5.29.19 Criticality=true
BasicConstraints:[
  CA:true
  PathLen:2147483647
]
#3: ObjectId: 2.5.29.31 Criticality=false
CRLDistributionPoints [
[DistributionPoint:
     [URIName: http://crl.globalsign.net/root-r2.crl]
]]
#4: ObjectId: 2.5.29.15 Criticality=true
KeyUsage [
  Key_CertSign
  Crl_Sign
]
#5: ObjectId: 2.5.29.14 Criticality=false
SubjectKeyIdentifier [
KeyIdentifier [
0000: 9B E2 07 57 67 1C 1E C0   6A 06 DE 59 B4 9A 2D DF  ...Wg...j..Y..-.
0010:
DC 19 86 2E                                        ....
]
]

想瞭解如何取得 keytool,請參閱「取得 Java keytool」一節的操作說明。

如何查看我的憑證存放區目前已安裝哪些憑證?

這要取決於您使用的作業系統,以及安全資料傳輸層 (SSL)/傳輸層安全標準 (TLS) 程式庫。不過,能讓您在存放區之間匯入和匯出憑證的工具,通常也會提供可列出已安裝憑證的選項。

此外,如果您已成功將信任的根憑證匯出至 PEM 檔案,或是您的憑證存放區已包含儲存的 PEM 檔案,則可嘗試透過任何文字編輯器開啟該檔案 (因為其為純文字檔案格式)。

PEM 檔案可能已加上適當的標籤,並以使用者可理解的格式提供相關憑證授權單位 (例如 Google 範例 PEM 檔案) 的資訊:

# Operating CA: GlobalSign
# Issuer: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
# Subject: CN=GlobalSign O=GlobalSign OU=GlobalSign Root CA - R2
# Label: "GlobalSign Root CA - R2"
# Serial: 4835703278459682885658125
# MD5 Fingerprint: 94:14:77:7e:3e:5e:fd:8f:30:bd:41:b0:cf:e7:d0:30
# SHA1 Fingerprint: 75:e0:ab:b6:13:85:12:27:1c:04:f8:5f:dd:de:38:e4:b7:24:2e:fe
# SHA256 Fingerprint: ca:42:dd:41:74:5f:d0:b8:1e:b9:02:36:2c:f9:d8:bf:71:9d:a1:bd:1b:1e:fc:94:6f:5b:4c:99:f4:2c:1b:9e
-----BEGIN CERTIFICATE-----
MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
-----END CERTIFICATE-----

這個檔案也可能只包含憑證部分。在這類情況下,檔案的名稱 (例如 GlobalSign_Root_CA_-_R2.pem) 可能會描述憑證所屬的 CA。針對每個 CA,-----BEGIN CERTIFICATE----------END CERTIFICATE----- 權杖之間的憑證字串都是唯一的,因此如果您無法辨別 CA,可以放心比較 PEM 檔案的這些字串。

也就是說,您可以將 Google 範例 PEM 檔案中的每個憑證,與您從憑證存放區擷取的 PEM 檔案進行比較。Google 根 CA 組合中的每個憑證均已加上適當的標籤,您可以放心驗證憑證存放區目前有哪些憑證;就算憑證存放區 PEM 檔案尚未加上標籤,您也可以從中辨識需要新增的憑證。

如需適用手機的操作說明,請另外參閱「如何查看手機上信任的根憑證?」這個常見問題的說明。

附錄

需要更多資訊嗎?

請務必參閱您的作業系統說明文件、應用程式程式設計語言的說明文件,以及應用程式使用的任何外部程式庫的說明文件。

任何其他來源的資訊 (包括這份常見問題清單) 可能已經過時或有誤,不應單純仰賴這些資訊。不過,您或許可以在很多 Stack Exchange 問與答社群,以及 AdamW on Linux and moreconfirm blog 等網站上,找到實用的相關資訊。另請參閱 GTS 常見問題,以及「如何使用 X.509 憑證和安全資料傳輸層 (SSL) 進行安全通訊」一文。

如需有關進階主題 (例如綁定憑證) 的詳細資料,不妨參考 Open Web Application Security Project (OWASP) 文章一覽表提供的實用資訊。如需適用 Android 的操作說明,請參閱「透過 HTTPS 和安全資料傳輸層 (SSL) 確保安全性」訓練說明文件,瞭解 Android 官方提供的安全性與隱私權最佳做法。如需有關使用憑證與在 Android 上綁定公開金鑰的討論,請參閱 Matthew Dolan 的網誌文章:Android 安全性:綁定安全資料傳輸層 (SSL),其中可能有您需要的資訊。

Android 的安全性與隱私權最佳做法「網路安全性設定」訓練說明文件,以及 JeroenHD 網誌文章「Android 7 Nougat 和憑證授權單位」則進一步提供有關如何在 Android 上管理其他信任憑證的資訊。

如需 Android 開放原始碼計畫信任的根 CA 完整清單,請參閱 CA 憑證 Git 存放區。至於其他以非官方 Android 分支為基礎的版本 (例如 LineageOS),請存取作業系統廠商提供的適用存放區。