1. PDF簽章類型使用CMS可以直接在signature內含CRL/OCSP資訊達成LTV,CADES(PAdES B-T (basic - timestamped))簽章類型則必需附加DSS(Document Secure Store)在檔案尾端(這樣用adobe reader打開會變成有「檔案已修改但被原作者承認的資訊」,但實際上itext好像不在乎你用哪個?),標準上只要包含憑證鏈所有憑證(除了CA不用)的CRL或OCSP其中之一的資訊即可達成LTV, 實作上則要先注意有的憑證內缺少OCSP URL(譬如行政院MOICA憑證...有夠雷,itext也不會提示你到底有沒有正確ocsp response,無奈)
注意,達成LTV, tsa(timestamp server)的憑證或CRL/OCSP資訊是不需要的,不用加入
2.注意憑證extension的Authority Information Access(AIA)包含的上一層issuer ca網址,格式可能是#PKCS7(.p7b)憑證(如自然人憑證的.p7b包含了一代及二代的憑證),有的套件(如pdfbox)預設會當成X509單一憑證,因此解不出來...(這也很雷)
2.時間tsa server的憑證及CRL/OCSP則無關緊要,無須包含其CRL/OCSP
3.Adobe Reader要把tsa server加到時戳伺服器信任清單,簽章的issuer及tsa的二個CA也要加到Adobe Reader的信任憑證(除非本來就在AATL或EUTL信任清單)
4.如果是包含CRL,要注意檔案有時會變得很大!而有時CRL太大抓不下來,可利用像itext的CrlClientOffline() 類別把預先抓下來的CRL載入即可。
5.檢查憑證鏈(除了根憑證)的每個憑證extension是否有包含CRL或OCSP的URL資訊,所有憑證至要有CRL或OCSP其中一個,有的憑證是同時缺少二者的,這樣無法達成LTV(這表示憑證有問題,若是CA憑證本來就不用這二個),而像MOICA就沒有OSCP只有CRL,因此個人憑證可用OCSP,但MOICA憑證只能用CRL達成LTV
5.目前試用自然人憑證做PDF數位簽章,上面1,2點的雷都有,政府(花錢叫中華)做的東西就是他X的雷。使用證券商的憑證就比較沒這些問題,一次達成LTV。
6.如果你到戶政辦自然人憑證,那麼卡片雖然會寫入個人的"二代"憑證,但用程式(如java)去取出cer1或cer2憑證鏈時,可能中繼(MOICA)及根(GRCA)都還是一代憑證!!可能為了省事只寫入個人憑證,然後舊的庫存卡片都預設先存好一代中繼及根憑證,這真的非常之雷,所以我怎麼用程式自動OCSP取得廢止狀態就是他馬的驗證不會過...後來發現這問題,就到自然人憑證網站重新寫入過一次憑證就都換成二代的了(譬如用修改email功能就會三個憑證都重寫),真的是超雷。
7.第三方套件的itext作者初始簽章LTV有點bug,我已經修改發了個PR上去了:
https://github.com/itext/itext7/pull/72
ref:
https://community.adobe.com/t5/acrobat-reader/ltv-enabled-signatures-not-longer-ltv-enabled-after-update-to-adobe-dc-2018/m-p/9898669
https://stackoverflow.com/questions/46321086/how-to-sign-a-pdf-with-embedded-timestamp-and-ltv-enabled
https://helpx.adobe.com/tw/acrobat/kb/certificates-corrupted-after-updating-trust-store.html
sir 換言之,要解決第五點的雷,是不是到自然人憑證網站重新寫入過一次憑證,將憑證直接全數更新成二代的就可以解決了?
回覆刪除是解決第六點的雷,把中繼及根憑證都換成二代的。
刪除