###前提・実現したいこと
OpenSSLで作成した秘密鍵で署名したデータのファイルをpython2で読み込んでそれをOpenSSLで作成した公開鍵、署名する前のデータとともにurllib、urllib2でAPIサーバーにPOSTする。
APIサーバーはFlaskを使用して、request.formで取得しています。POSTされた署名をOpenSSLで送られてきた元データと検証したいです。
###該当のソースコード
python2.7
import subprocess import urllib.request subprocess.call('openssl genrsa 2048 > prikey.pem', shell=True) subprocess.call('openssl rsa -in prikey.pem -pubout -out pubkey.pem', shell=True) data = 'abc' with open('data.txt', 'w') as f: f.write(data) subprocess.call('openssl dgst -sign prikey.pem hash_token.txt > sign.sig', shell=True) with open('sign.sig', 'r') as f: sign = f.read() url = "http://xxxxxx/xxx" params = {'token': token, 'sign': sign, 'pubkey':pubkey} params = urllib.urlencode(params) req = urllib2.Request(url) req.add_data(params)
python3.x
from flask import Flask, request data = request.form['data'] pubkey = request.form['pubkey'] sig = request.form['sign'] with open('data.txt', 'w') as f: f.write(data) with open('pubkey.pem', 'w') as f: f.write(pubkey) with open('sign.sig', 'w') as f: f.write(sig)
###試したこと
上記を実行して、作成したsign.sigとdata.txtをOpenSSLの検証コマンドで検証したところOKにすることが出来ません。
仮に署名データをファイルごと移した場合はOKになるので恐らく署名データを送る際のエンコードの問題なのではないかと思っています。
###補足情報(言語/FW/ツール等のバージョンなど)
request.formでの取得でなくても大丈夫です。
とにかく、署名データをPOSTしてそのデータを検証し、一致したいと思っています。
よろしくお願いします。
あなたの回答
tips
プレビュー