如果我在Mac或Linux中有實際的文件和Bash shell,我該如何查詢證書文件何時會過期?不是一個網站,而是實際上證書文件本身,假設我有csr,key,pem和chain文件。如何從PEM編碼證書確定SSL證書過期日期?
回答
隨着openssl
:
openssl x509 -enddate -noout -in file.pem
輸出爲形式:
notAfter=Nov 3 22:23:50 2014 GMT
另見MikeW's answer對於如何輕鬆地檢查證書是否過期與否,或者是否會在一一定的時間段,而不必解析上述日期。
如果你只是想知道證書是否已過期(或將在未來的N秒內這樣做),則-checkend <seconds>
選項openssl x509
會告訴你:
if openssl x509 -checkend 86400 -noout -in file.pem
then
echo "Certificate is good for another day!"
else
echo "Certificate has expired or will do so within 24 hours!"
echo "(or is invalid/not found)"
fi
這節省了做日期/你可以自己比較時間。
openssl
將返回0
(零)如果證書尚未過期,並在接下來的86400秒不會做這樣的退出代碼。如果證書已過期或已經這樣做 - 或者其他錯誤(如無效/不存在的文件),則返回碼爲1
。
(當然,它假定時間/日期設置是否正確)
要確定證書是否當前過期,請使用零秒持續時間。省略「-noout」選項可使用單個命令查看有用的消息,而無需額外的邏輯。例如,'openssl x509 -checkend 0 -in file.pem'將輸出「證書將過期」或「證書不會過期」,指示證書是否將在零秒內到期。 –
這裏是我的bash命令行的到期順序列出多個證書,最近到期的第一。
for pem in /etc/ssl/certs/*.pem; do
printf '%s: %s\n' \
"$(date --date="$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" --iso-8601)" \
"$pem"
done | sort
示例輸出:
2015-12-16: /etc/ssl/certs/Staat_der_Nederlanden_Root_CA.pem
2016-03-22: /etc/ssl/certs/CA_Disig.pem
2016-08-14: /etc/ssl/certs/EBG_Elektronik_Sertifika_Hizmet_S.pem
對於MAC OSX(埃爾卡皮坦)Nicholas的例子的該變形例爲我工作。
for pem in /path/to/certs/*.pem; do
printf '%s: %s\n' \
"$(date -jf "%b %e %H:%M:%S %Y %Z" "$(openssl x509 -enddate -noout -in "$pem"|cut -d= -f 2)" +"%Y-%m-%d")" \
"$pem";
done | sort
樣本輸出:
2014-12-19: /path/to/certs/MDM_Certificate.pem
2015-11-13: /path/to/certs/MDM_AirWatch_Certificate.pem
MacOS的不喜歡我的系統上--date=
或--iso-8601
標誌。
如果您沒有製作.pem文件,但是您剛剛製作並從Apple Dev站點下載了'.cer'證書,您將如何做到這一點? –
這是一個bash函數,用於檢查所有服務器,假設您使用的是DNS循環。注意,這需要GNU日期並不會在Mac OS工作
function check_certs() {
if [ -z "$1" ]
then
echo "domain name missing"
exit 1
fi
name="$1"
shift
now_epoch=$(date +%s)
dig +noall +answer $name | while read _ _ _ _ ip;
do
echo -n "$ip:"
expiry_date=$(echo | openssl s_client -showcerts -servername $name -connect $ip:443 2>/dev/null | openssl x509 -inform pem -noout -enddate | cut -d "=" -f 2)
echo -n " $expiry_date";
expiry_epoch=$(date -d "$expiry_date" +%s)
expiry_days="$((($expiry_epoch - $now_epoch)/(3600 * 24)))"
echo " $expiry_days days"
done
}
輸出例如:
$ check_certs stackoverflow.com
151.101.1.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.65.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.129.69: Aug 14 12:00:00 2019 GMT 603 days
151.101.193.69: Aug 14 12:00:00 2019 GMT 603 days
- 1. AFNetworking SSL Pinning過期證書
- 2. 檢查SSL證書到期日期
- 3. 檢查SSL證書的到期日期
- 4. SSL證書編譯成pem文件
- 5. APN SSL證書有效期
- 6. SSL證書沒有日期錯誤
- 7. 以編程方式確定紅寶石中的SSL證書到期日期
- 8. 獲取openssl證書過期日期
- 9. 確定哪個證書過期
- 10. 證書已過期?
- 11. WWDR證書過期
- 12. java - 忽略過期的ssl證書
- 13. 'Peer Not Authenticated',parse.com SSL證書過期
- 14. Apache JMeter接受過期的SSL證書
- 15. 如何通過C#代碼獲取證書的到期日期?
- 16. 如何使用aiohttp檢查SSL證書到期日期?
- 17. APNS證書.pem
- 18. ssl客戶端如何接受過期的SSL證書
- 19. SSL證書驗證編程
- 20. SSL連接使用Python的.pem證書
- 21. 證書到期
- 22. 如何從連接的SSL會話中獲取base64編碼證書(PEM)
- 23. 如何跟蹤客戶的託管/域名/ SSL證書過期日期?
- 24. 將PEM證書或Java證書轉換爲ASN1證書
- 25. 如何從PHP中的SSL證書文件獲取到期日期
- 26. 撤銷過期證書
- 27. 證書到期日期檢查
- 28. 代碼簽名證書過期問題
- 29. 如何將SSL證書中的長日期轉換爲短日期| Unix KSH
- 30. 檢測到期的SSL證書
Stack Overflow是用於編程和發展問題的站點。這個問題似乎是無關緊要的,因爲它不是關於編程或開發。請參閱幫助中心的[我可以詢問哪些主題](http://stackoverflow.com/help/on-topic)。也許[超級用戶](http://superuser.com/)或[Unix&Linux堆棧交換](http://unix.stackexchange.com/)會是一個更好的地方。另請參閱[我在哪裏發佈有關Dev Ops的問題?](http://meta.stackexchange.com/q/134306)。 – jww