質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

1567閲覧

証明書取得の際にエラーが表示されてしまった

study_111

総合スコア82

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2020/06/13 00:51

編集2020/06/13 01:31

Qiitaの記事を参考に、SSL証明書を取得するコードを実行してみました。
該当のコードは以下になります。

import socket import ssl import OpenSSL def get_server_certificate(hostname): context = ssl.create_default_context() with socket.create_connection((hostname, 443)) as sock: with context.wrap_socket(sock, server_hostname=hostname) as sslsock: der_cert = sslsock.getpeercert(True) return ssl.DER_cert_to_PEM_cert(der_cert) cert = get_server_certificate('www.google.com') x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)

エラーの内容は以下になります。

can only concatenate str (not "SSLContext") to str

エラー内容で、検索にかけ調べてみたのですが、分からなかった為質問させて貰いました。
どなたか、ご助言頂けましたら幸いです。

追記です

環境構築は、VScodeを用いて、行いました。
フレームワークはDjangoを使用しています。

以下は、フロント部分のindex.htmlになります

<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>demo</title> </head> <body> <form action="{% url 'tool:check' %}" method="post"> {% csrf_token %} <input type="url" name="check_url" placeholder="http://example.com"> <button type="submit" name="check" value="send">送信</button> </form> </body> </html>

以下は、URL.pyになります。

from django.urls import path from . import views app_name = 'tool' urlpatterns = [ # ex: /polls/ path('', views.index, name='index'), # ex: /polls/5/ path('<int:question_oo>/', views.detail, name='detail'), # ex: /polls/5/results/ path('check', views.check, name='check'), # ex: /polls/5/vote/ path('<int:question_id>/vote/', views.vote, name='vote'), ]

以下は、views.py(仕事の都合上一部のコードのみ掲載)

import socket import ssl import OpenSSL #SSL通信 def get_server_certificate(hostname): context = ssl.create_default_context() print('contextは ' + context) # exit() with socket.create_connection((hostname, 443)) as sock: print('sockは ' + sock ) with context.wrap_socket(sock, server_hostname=hostname) as sslsock: print('sslsockは ' + sslsock ) der_cert = sslsock.getpeercert(True) print('der_certは ' + der_cert) return ssl.DER_cert_to_PEM_cert(der_cert) def check(request): cert = get_server_certificate('www.google.com') print(cert) x509 = OpenSSL.crypto.load_certificate(OpenSSL.crypto.FILETYPE_PEM, cert)

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

can110

2020/06/13 01:04

エラーが再現しません。正常に動作します。 エラーの完全なTraceback、OSやpythonバージョンなどの環境について追記ください。
study_111

2020/06/13 01:18

再現確認して頂いたのに、すみません。 実は、フレームワークである、Djangoを使用し、その中に組み込んでいました... 詳細を追記したいと思います。
guest

回答1

0

ベストアンサー

エラーの内容からSSLContext型とstr型の結合をしようとしてエラーが発生しているのが分かります。本ソースコードの中でSSLContext型の変数はcontextのみですので、下記のようなデバッグコードを入れていないでしょうか?

python

1print("context=" + context)

"context="はstr型で、contextはSSLContext型のため、+で結合することはできません。もしこの仮定が正しいのであれば、型を気にせず表示したい場合、print()ではコンマを使います。

python

1print("context=", context)

投稿2020/06/13 01:24

yymmt

総合スコア1615

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

study_111

2020/06/13 01:30

ご回答ありがとうございます。 ご回答頂きました通りでした。 コードの方も、きちんと掲載するべきでした。 「print("context=", context)」こちらの形でコードを修正しましたら、エラーが消え、実行することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問