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

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

新規登録して質問してみよう
ただいま回答率
85.47%
DTO(Data Transfer Object)

DTO(Data Transfer Object)とは、データを転送するために定義されたクラスのこと。関連データを集約し、データの格納や読み出しのメソッドを定義したオブジェクトです。データを管理するためのフィールド群に対応したセッター・ゲッターで構成されています。

Python

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

Q&A

1回答

962閲覧

OCSP Python error parsing asn1 value について

Tasuuuku

総合スコア12

DTO(Data Transfer Object)

DTO(Data Transfer Object)とは、データを転送するために定義されたクラスのこと。関連データを集約し、データの格納や読み出しのメソッドを定義したオブジェクトです。データを管理するためのフィールド群に対応したセッター・ゲッターで構成されています。

Python

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

0グッド

0クリップ

投稿2023/01/08 04:22

編集2023/01/08 06:20

前提

PythonのOCSPライブラリを使って、OCSPレスポンダを作ろうとしております。

バイト列から OCSP Requestに変換する関数、ocsp.load_der_ocsp_request()が出すエラーメッセージに悩んでおります。

ぜひ、お力を貸していただきたく存じます。

Pythonのライブラリ
https://cryptography.io/en/latest/x509/ocsp/

ocsp.load_der_ocsp_request()のソースコード
https://github.com/pyca/cryptography/blob/0f2d8303383aa0ec1717ea20685b5d158248df8a/src/rust/src/x509/ocsp_req.rs#L21

実現したいこと

エラーを解決する

発生している問題・エラーメッセージ

error parsing asn1 value: ParseError { kind: UnexpectedTag { actual: Tag { value: 13, constructed: false, class: Application } } }

該当のソースコード

サーバー側 エラーを吐くコード

Python3.9

1 try: 2 print(request.get_data()) 3 print(type(request.get_data())) 4 ocsp_req = ocsp.load_der_ocsp_request(request.get_data()) 5 except Exception as e: 6 ###error parsing asn1 value: ParseError { kind: UnexpectedTag { actual: Tag { value: 13, constructed: false, class: Application } } } 7 print(e) 8 return make_response("malformed ocspRequest", 400)

クライアント側 OCSP Requestをバイト列で送っているコード

Python3.9

1 try: 2 cert = load_pem_x509_certificate(pem_cert) 3 issuer = load_pem_x509_certificate(pem_issuer) 4 except Exception as e: 5 exit(e) 6 7 try: 8 builder = ocsp.OCSPRequestBuilder() 9 builder = builder.add_certificate(cert, issuer, SHA256()) 10 req = builder.build() 11 print(req) 12 req_data = base64.b64encode(req.public_bytes(serialization.Encoding.DER)) 13 except Exception as e: 14 exit(e) 15 16 headers = { 17 'Content-Type': 'application/ocsp-request' 18 } 19 20 url = 'http://localhost:8000/ocsp' 21 try: 22 r = requests.post(url, data=req_data,headers=headers) 23 print(r.text) 24 except requests.HTTPError as e: 25 print(e.status_code) 26 print(e.text) 27 exit(e)

試したこと

証明書自体に不備があるのかと思い、いくつかの証明書でOCSPRequestのバイト列を作って試してみましたが、どれも結果は同じでした。

補足情報

Name: cryptography
Version: 39.0.0
Summary: cryptography is a package which provides cryptographic recipes and primitives to Python developers.
Home-page: https://github.com/pyca/cryptography

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

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

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

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

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

guest

回答1

0

OCSP(Online Certificate Status Protocol)レスポンダを作成するためにPythonのOCSPライブラリを使用する場合、OCSPリクエストをバイト列から読み込むためのocsp.load_der_ocsp_request()関数に関するエラーメッセージに対処する方法についてお手伝いできます。

OCSPリクエストのバイト列からOCSPリクエストオブジェクトを正しく読み込むために、以下のステップに従ってください。

OCSPライブラリのインストール: OCSPライブラリを正しくインストールしていることを確認してください。通常、Pythonのcryptographyモジュールを使用してOCSPを処理します。 official website

投稿2023/09/09 05:47

fronisa3

総合スコア4

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.47%

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

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

質問する

関連した質問