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

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

新規登録して質問してみよう
ただいま回答率
85.35%
AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

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

Q&A

解決済

1回答

3443閲覧

python3 AWS LambdaでPKCS#12ファイルから証明書と秘密鍵をエクスポートする際のcryptographyランタイムエラーについて

taharasan

総合スコア55

AWS Lambda

AWS Lambdaは、クラウド上でアプリを実行できるコンピューティングサービス。サーバーのプロビジョニングや管理を要せず複数のイベントに対してコードを実行します。カスタムロジック用いた他AWSサービスの拡張やAWSの規模やパフォーマンスを用いたバックエンドサービスを作成できます。

Python 3.x

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

0グッド

0クリップ

投稿2021/05/22 06:57

編集2021/05/22 07:11

【質問内容】
下記のように、PKCS#12ファイルから、証明書とプライペートキー抽出、.pemファイルへ出力し
エンドポイントURLへ接続する処理を作成しています。

ローカル環境(Windows10)では問題無く動作したのですが、AWS Lambda上にアップロードした際
下記ランタイムエラーで動作しませんでした。

該当モジュールは
pip install pyOpenSSL -t .
にて該当PGと同じ階層にインストールし、ZIPファイルをアップロードしております。

pyOpenSSLをインストールした中の「cryptography」が動作しないようですが、何か対応方法はあるのでしょうか?

【懸念事項】
pyOpenSSLのモジュールを、ローカル環境(Windows10)でインストールしましたが
AWS LambdaはLinuxベースの為、動作しないようなことはあるのでしょうか?

【Lambdaエラーメッセージ】
{
"errorMessage": "Unable to import module 'モジュール名': No module named 'cryptography.hazmat.bindings._constant_time'",
"errorType": "Runtime.ImportModuleError",
"stackTrace": []
}

【Pythonバージョン】
ローカル環境:3.8.3
Lambda環境:3.8

よろしくおねがいします。

python3

1 2from requests import Session 3from OpenSSL import crypto 4 5################################################## 6# クライアント認証https POST接続 7# 引数 8# P12File : PKCS12ファイルパス 9# P12passwd : P12 パスワード 10# client_certs_pem : 証明書、プライベートキー出力ファイル名パス 11# url : 接続先URLアドレス 12# POSTdata : POST接続パラメーター 13# 戻り値 14# レスポンスコード、メッセージ 15# 200 or 403 ...any 16################################################## 17def func_httpscon(P12File, P12passwd, client_certs_pem, url, POSTdata): 18 19 #PKCS12ファイルから、 証明書、プライベートキー出力ファイル 20 with open(P12File, 'rb') as p12_file, \ 21 open(client_certs_pem, 'wb') as cert_file_Writer: 22 23 p12 = crypto.load_pkcs12(p12_file.read(), bytes(P12passwd, 'utf-8')) 24 25 cert_file_Writer.write(crypto.dump_certificate( 26 crypto.FILETYPE_PEM, p12.get_certificate())) 27 28 cert_file_Writer.write(crypto.dump_privatekey( 29 crypto.FILETYPE_PEM, p12.get_privatekey())) 30 31 # https接続 32 s = Session() 33 s.cert = client_certs_pem 34 35 try: 36 r = s.post(url, params=POSTdata) 37 status_code = r.status_code 38 status_text = r.text 39 # 接続エラー 40 except: 41 status_code = 999 42 status_text = "Func_HTTPSCon接続エラーです。" 43 44 print("status_code : " + str(status_code)) 45 print("status_message :" + status_text) 46 47 return status_code, status_text

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

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

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

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

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

guest

回答1

0

ベストアンサー

pyOpenSSLのモジュールを、ローカル環境(Windows10)でインストールしましたが
AWS LambdaはLinuxベースの為、動作しないようなことはあるのでしょうか?

手元で見てみた限り、cryptographyは内部にバイナリを含むタイプのパッケージのようです。
この場合だと、pip install実行時にインストールされるバイナリが、
コマンド実行時のOSを前提とするため、基本的には動かないです。

そのため、アップロード用のzipファイルを作成するためには、
ライブラリ準備環境にLinuxを用意する必要があります。
※用意手法自体は結構いろいろな方法があるので割愛します

投稿2021/05/22 17:05

attakei

総合スコア2740

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

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

taharasan

2021/05/26 08:32

ご回答ありがとうございます。 別途、Amazonにも問い合わせましたが、やはり環境依存のため使用できない模様です。 取り急ぎ、pyopensslは使用せず、証明書とプライペートキーをローカルで抽出し 「.pem」形式のファイルを使用するように対応しました。 クローズします。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問