2012-09-17 2 views
3

이 질문은 며칠 동안 NDA에있는 통장에 관한 것이지만 일반적인 PKCS7 질문입니다.Google App Engine에서 PKCS7 인코딩 (파이썬, 통장)

내 키 체인에서 내 보낸 .p12 파일이 있습니다. 나는 서명 된 PKCS7 파일을 만들

openssl pkcs12 -in "mycert.p12" -clcerts -nokeys -out certificate.pem 
openssl pkcs12 -in "mycert.p12" -nocerts -out key.pem 

다음 단계는이 키와 인증서를 사용하는 다음 명령을 사용하여 2 PEMS이 점을 분리 할 수 ​​있어요. 이렇게하려면 openssl을 쉽게 수행 할 수 있습니다 :

openssl smime -binary -sign \ 
    -signer certificate.pem -inkey key.pem \ 
    -in <datafile> -out signature \ 
    -outform DER 

문제는, 구글 앱 엔진에서이 작업을 수행하는 가장 좋은 방법은 내가 인증서와 키를 가지고 가정 무엇입니까? 불행히도 저는 암호화에 조금 새로운 것이지만, 나는 인터넷 검색을하고 PyCrypto와 keyczar를 발견했습니다. App Engine에서이를 수행 할 수있는 승인 된 방법이 있습니까? 아니면 무언가를 쓸 필요가 있습니까? 패키지를 시작할 권장 사항은 무엇입니까?
openssl을 AppEngine에서 사용할 수 없다는 것을 알고 있지만 파이썬 2.7을 사용한다면 PyCrypto가 맞습니까? 그리고 저는 사람들이 keczar를 가지고 작업하는 것을 보았습니다. 키와 인증서가 주어진다면 PKCS7로 인코딩 된 데이터를 생성하는 간단한 방법을 찾을 수 없었습니다.

미리 안내해 주셔서 감사합니다.

+0

에서 가져온 M2Crypto를 사용하는 방법이지만, 분명히이 이상적이지입니다. 아무도이 문제를 해결하면 여전히 듣고 싶습니다. –

답변

1

는 여기에 내가 서명 부분을 명시 적으로 안전한 원격 서버를 조회하여 함께 해결 방법을 자갈 관리했습니다 https://github.com/devartis/passbook

def passwordCallback(*args, **kwds): 
    return password 

smime = SMIME.SMIME() 
smime.load_key('key.pem', 'certificate.pem', callback=passwordCallback)   
pk7 = smime.sign(SMIME.BIO.MemoryBuffer(manifest), flags=SMIME.PKCS7_DETACHED | SMIME.PKCS7_BINARY)     
pem = SMIME.BIO.MemoryBuffer() 
pk7.write(pem) 
# convert pem to der 
der = ''.join(l.strip() for l in pem.read().split('-----')[2].splitlines()).decode('base64')   

open('signature', 'w').write(der) 
+1

불행히도 M2Crypto는 Google App Engine에서 액세스 할 수 없습니다. 왜냐하면 후드 아래에 c를 사용하고 있기 때문입니다. GAE는 현재 PyCrypto 2.6 만 지원합니다. –

+0

이것은 GAE가 아니더라도 일반적으로 유용한 대답입니다. github 링크는 404입니다. – ohmi

관련 문제