質問編集履歴

2

追記の説明の追加

2022/12/07 05:19

投稿

harunoyo
harunoyo

スコア1

test CHANGED
File without changes
test CHANGED
@@ -57,6 +57,7 @@
57
57
  https://teratail.com/questions/269727
58
58
 
59
59
  ### 追記:改変したソースコード
60
+ 「sslで接続を保ててかつ,証明書が有効期限内の場合にTrueを返し,sslで接続を保てない場合にFalseを返す」コードを書いてみたところ,欲しい結果を得ることができました.
60
61
 
61
62
  ```python3
62
63
  import socket

1

問題を解決できたので改変後のコードを追加しました

2022/12/07 04:56

投稿

harunoyo
harunoyo

スコア1

test CHANGED
File without changes
test CHANGED
@@ -56,5 +56,44 @@
56
56
  ・参考にしたコード
57
57
  https://teratail.com/questions/269727
58
58
 
59
+ ### 追記:改変したソースコード
59
60
 
61
+ ```python3
62
+ import socket
63
+ import ssl
64
+ import OpenSSL
60
65
 
66
+ valid=False
67
+
68
+ def get_server_certificate(hostname):
69
+ context = ssl.create_default_context()
70
+ try:
71
+ with socket.create_connection((hostname, 443)) as sock:
72
+ with context.wrap_socket(sock, server_hostname=hostname) as sslsock:
73
+ der_cert = sslsock.getpeercert(True)
74
+ return ssl.DER_cert_to_PEM_cert(der_cert),True
75
+ except:
76
+ return 0,False
77
+
78
+ cert = get_server_certificate('qiita.com')
79
+
80
+ valid=cert[1]
81
+
82
+ if valid==True:
83
+ x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert[0].encode('utf-8'))
84
+
85
+ import datetime
86
+ from datetime import datetime as dt
87
+ not_before = dt.strptime(str(x509.get_notBefore())[2:16],'%Y%m%d%H%M%S') + datetime.timedelta(hours=9)
88
+ not_after = dt.strptime(str(x509.get_notAfter())[2:16],'%Y%m%d%H%M%S') + datetime.timedelta(hours=9)
89
+ print(not_after)
90
+
91
+ period=not_after - dt.now()
92
+
93
+ if period.days>0:
94
+ valid=True
95
+ else:
96
+ valid=False
97
+ valid
98
+ ```
99
+