質問編集履歴
2
追記の説明の追加
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
問題を解決できたので改変後のコードを追加しました
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
|
+
|