質問編集履歴

11

追記

2020/06/20 11:28

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -140,6 +140,8 @@
140
140
 
141
141
  ```
142
142
 
143
+ #SSL通信の検証
144
+
143
145
  def get_server_certificate(hostname):
144
146
 
145
147
  # socket.gethostbyname('hostname')
@@ -188,24 +190,26 @@
188
190
 
189
191
  print(ssl.match_hostname(der_cert,hostname))
190
192
 
193
+
194
+
195
+ except ssl.CertificateError:
196
+
197
+ print('ホスト名とSSL証明書のコモンネームが一致しません')
198
+
199
+ except ssl.SSLCertVerificationError:
200
+
201
+ print('SSL証明書が有効ではありません。')
202
+
203
+ print('TLSサーバー証明書の検証に失敗しました。')
204
+
205
+
206
+
207
+ except socket.timeout:
208
+
209
+ print('接続タイムアウトエラー:SSL接続が確認出来ませんでした')
210
+
191
211
  except OSError as e:
192
212
 
193
213
  print('接続が拒否されました',e)
194
214
 
195
- except ssl.CertificateError:
196
-
197
- print('ホスト名とSSL証明書のコモンネームが一致しません')
198
-
199
- except ssl.SSLCertVerificationError:
200
-
201
- print('SSL証明書が有効ではありません。')
202
-
203
- print('TLSサーバー証明書の検証に失敗しました。')
204
-
205
-
206
-
207
- except socket.timeout:
208
-
209
- print('接続タイムアウトエラー:SSL接続が確認出来ませんでした')
210
-
211
- ```
215
+ ```

10

追記

2020/06/20 11:28

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -127,3 +127,85 @@
127
127
 
128
128
 
129
129
  > nodename nor servname provided, or not known
130
+
131
+
132
+
133
+
134
+
135
+ **追記2**
136
+
137
+
138
+
139
+ 以下は、修正したSSL検証の関数になります。
140
+
141
+ ```
142
+
143
+ def get_server_certificate(hostname):
144
+
145
+ # socket.gethostbyname('hostname')
146
+
147
+ context = ssl.create_default_context()
148
+
149
+
150
+
151
+ # print('contextは ', dir(context))
152
+
153
+ # exit()
154
+
155
+
156
+
157
+ """
158
+
159
+ address ((host, port) ペア) で listen しているTCPサービスに接続し、
160
+
161
+ ソケットオブジェクトを返す
162
+
163
+ """
164
+
165
+ try:
166
+
167
+ with socket.create_connection((hostname, 443)) as sock:
168
+
169
+ print('コネクション成功')
170
+
171
+ """
172
+
173
+ 元のソケット通信の機能があるクラス(sock)を内包し、
174
+
175
+ SSLを利用して暗号化通信をソケットを通じて行う機能のクラス(ssl.SSLSocke)
176
+
177
+ がラッパークラス
178
+
179
+ """
180
+
181
+ with context.wrap_socket(sock, server_hostname=hostname) as sslsock:
182
+
183
+ #証明書を取得(Falseの場合はdictで取得、Trueの場合はバイナリ形式で取得)
184
+
185
+ der_cert = sslsock.getpeercert(False)
186
+
187
+ print(der_cert)
188
+
189
+ print(ssl.match_hostname(der_cert,hostname))
190
+
191
+ except OSError as e:
192
+
193
+ print('接続が拒否されました',e)
194
+
195
+ except ssl.CertificateError:
196
+
197
+ print('ホスト名とSSL証明書のコモンネームが一致しません')
198
+
199
+ except ssl.SSLCertVerificationError:
200
+
201
+ print('SSL証明書が有効ではありません。')
202
+
203
+ print('TLSサーバー証明書の検証に失敗しました。')
204
+
205
+
206
+
207
+ except socket.timeout:
208
+
209
+ print('接続タイムアウトエラー:SSL接続が確認出来ませんでした')
210
+
211
+ ```

9

修正

2020/06/20 11:15

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -127,9 +127,3 @@
127
127
 
128
128
 
129
129
  > nodename nor servname provided, or not known
130
-
131
-
132
-
133
- **追記②**
134
-
135
- ```input_url```には、```http://gundamsblog.net/```を入力致しました。

8

追記②

2020/06/19 23:43

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -127,3 +127,9 @@
127
127
 
128
128
 
129
129
  > nodename nor servname provided, or not known
130
+
131
+
132
+
133
+ **追記②**
134
+
135
+ ```input_url```には、```http://gundamsblog.net/```を入力致しました。

7

本文修正

2020/06/19 03:24

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 「input_url」にはhttps化されていないサイトのURL名(http://example.comの形)を代入しましたのですが、その結果、コンソールには、「接続が拒否されました」と表示されました。
13
+ 「input_url」にはhttps化されていないサイトのURL名を代入しましたのですが、その結果、コンソールには、「接続が拒否されました」と表示されました。
14
14
 
15
15
  該当の例外は、「OSError」であるかと思いますが、[公式リファレンス](https://docs.python.org/ja/3/library/exceptions.html#OSError)を参照してみたものの、原因を突き止められませんでした。
16
16
 

6

本文修正

2020/06/19 03:20

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -10,7 +10,7 @@
10
10
 
11
11
 
12
12
 
13
- 「input_url」にはhttps化されていないサイトのURL名を代入しましたのですが、その結果、コンソールには、「接続が拒否されました」と表示されました。
13
+ 「input_url」にはhttps化されていないサイトのURL名(http://example.comの形)を代入しましたのですが、その結果、コンソールには、「接続が拒否されました」と表示されました。
14
14
 
15
15
  該当の例外は、「OSError」であるかと思いますが、[公式リファレンス](https://docs.python.org/ja/3/library/exceptions.html#OSError)を参照してみたものの、原因を突き止められませんでした。
16
16
 

5

本文修正

2020/06/19 03:18

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -108,7 +108,7 @@
108
108
 
109
109
 
110
110
 
111
- ** ※追記です**
111
+ **※追記です**
112
112
 
113
113
 
114
114
 

4

本文修正

2020/06/19 03:13

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -108,7 +108,7 @@
108
108
 
109
109
 
110
110
 
111
- **追記です**
111
+ **追記です**
112
112
 
113
113
 
114
114
 

3

本文修正

2020/06/19 03:12

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -126,4 +126,4 @@
126
126
 
127
127
 
128
128
 
129
- ```nodename nor servname provided, or not known```
129
+ > nodename nor servname provided, or not known

2

追記

2020/06/19 03:11

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -103,3 +103,27 @@
103
103
 
104
104
 
105
105
  どなたか、こちらの現象解決の為、ご助言頂けましたら幸いです。
106
+
107
+
108
+
109
+
110
+
111
+ **追記です**
112
+
113
+
114
+
115
+ OSErrorの例外をキャッチしている部分を、以下の形にし、エラーの詳細を表示させてみました。
116
+
117
+ ```
118
+
119
+ except OSError as e:
120
+
121
+ print('接続が拒否されました',e)
122
+
123
+ ```
124
+
125
+ 結果の方は、コンソールにて、以下のように表示されました
126
+
127
+
128
+
129
+ ```nodename nor servname provided, or not known```

1

本文修正

2020/06/19 03:10

投稿

study_111
study_111

スコア82

test CHANGED
File without changes
test CHANGED
@@ -98,7 +98,7 @@
98
98
 
99
99
  ### 試したこと
100
100
 
101
- エラー内容の検索、公式リファレンスの参照。
101
+ エラー内容の検索、公式リファレンスの参照を行いました
102
102
 
103
103
 
104
104