Skip to content

Instantly share code, notes, and snippets.

@clinta
Created September 29, 2015 15:59
Show Gist options
  • Save clinta/e277233db6403284fc8b to your computer and use it in GitHub Desktop.
Save clinta/e277233db6403284fc8b to your computer and use it in GitHub Desktop.
M2Crypto works with OpenSSL 1.0.1f, fails on 1.0.1k
#!/usr/bin/python
import M2Crypto
# to anyone who may panic, this is a dynamic generated key for demonstration purposes, not used anywhere.
private_key_pem = """-----BEGIN RSA PRIVATE KEY-----
MIIJKQIBAAKCAgEAsm16cX7C2wqRA5FcyOIUHck+oEdAHlvFB6vRKf3PSGXNRHlJ
bHuhKbj92U7ZVXUqxhvpBygmzz0x0kyzN/23RS3MZYokd4FjipHFW2CdvkHs7oT/
qZlQc0c3fyGliLiVZxdzPvABPxSlnZKQv0a+/PX6ja5s2xgt+XjefjtUktktq0Qh
89I3t65P+yKkqAGFbmw69rftUBxZlPp1xFkGf16DyEOTkSAmDLLkZU9H3kdbAB3H
ijYSC63t77TnPfBKerOjH3NiELoHJeQK4GyRBXHiH3VSgFQsIuUKD9W057Iyvder
ZqmBvfjxEkhnpEsQWq8Lyroj1kMYWLgOjPfhanrtDO4zh2gvwD6Uqe3mp+cEk/TA
Ke234AttsVq7Ll/fuq3bGdK/wUj9JeGfNOmoXDZAczlkMEwdGR31oWDMU7dEbH2X
WeuQ9QpvRY8r+lepL0wL7YToa/lYTWvrPP4qyQ+Zn00QKK/TekubqJdYH83133U8
bjk7plQ+1lTUGzjJz9ewN/coGOlUPCH3F1TvThN9PNS4vsviEnT7j42xBrbxAgNy
N2PPS8QO0dU+oILqeW1ES0LLEBQX381bzlEYFmR6pCH3wzdMnND4nGoRW5kRlzV9
nliMPhPMlVmagrv3VpWoCbUKpOx8SJHqQpIYqpgUo+4HVmpkHhNKn9RaeXcCAwEA
AQKCAgAtF/QRCPtQBnydzTgI4PI6kOjN8xPmWEUUaj0DgszHPEtDWe/PhfM2KzWk
nQPaUDFOPjGHiIM+bvXPc2j75phR2IBGzUHoHgA9PhgFvwY+1kR+B4jhoQivCbmh
3KwMQLIpisiqiFeYTKyKhUclwEh2f+ghtIp4WMUNvplkh7QZJOAg36hBCcjhGCHI
k3nPqArD3ICOZ++HBpMxTpdC10kIGafujf2WeOyE2xVT8VR1fc0m21/Zs06eOwfe
Q/cJNVhtaEb6pNuM5Kb30YlaLLX+DUkbsDf4jM1WyFHhrJ36zJN8XSxJVt+eVnL+
ruPapsnsUT8GrkJuXSijC2lKAT+rkA0WviiX+cCAr9+PQW9UO94w+IfZMNR4khrf
r88sRqIZ9Tv+6u6vOcjlVsf1XJhKEOeUTaYLilFVQb14dxHZyKPBRFms4ZoS0XEI
to02EYwSj+xRM+2G7GB/DuSH5OBlChp2twkS9/I5dPZ9mwqWpPEFiWYHbEryO4sP
Zh1wiCnO3pw6I7FDzqZhO5YU7nduLnH9IUhOU1vzJ5wWSjwOtmI2Li9QdYHE/ePG
vTQXApOFDnhKITssAZ9ZSDteolYKfBXwif324yPlFGHwmcd2xTpMPTDzeLNZVogz
OIYWSBg0qw3QTcJaL1ZUDCcfD4WcMggS74CVlWF3QtMtgEs8qQKCAQEA6cNWM6eB
rQ5biWblbPzaLSKtfPH9HKL2QFnz4I/kmdvJRbE860+6ZrIIevYtfpC/7pJXVMBn
NnOCjLabLHy8YaSz9fauQS+F6MV9gMdzFhNq9/reuYvlpFHRpY4lRPB/oXh1e1Pj
5kruJvBec1X1liebzZiIrEvc4vUEu6okhsunhMHbEwEvR/3yoPfnb7GHhdqttwCc
HMwJzITRE4ZBpFxJnHI5qVA8fcVU2K9PBOD8D3V7mXDMkHKS4hz9JJh2equtTgV/
fIlGFogBAHeidU+bkDTLB/VbzoSfxxWS2B6wtToVQL5cJtKRhxgr9iHTVYedXW+3
6G91tgOjKK3sIwKCAQEAw2aZQ/ZX1CGOfsze/tdC6Vd2Tp4YZ3WtjULaiiclBZSm
UNdHRjiFfk5IDKuH2au7W/rAssnR82nicL8DafRLRGmz++ulC8kvRjQsX3oMlaYW
PviK22TD4USQZx0jcs4YXV4ITXsDSKg57dzJbd7OXpMrBtdeTeqR7pY0MLa+XSIj
jpcd6KDGyxyzCfbZJawfVdH8K5+BJD1E3dSEmr5Ev7jFUUq6IElzOB4L+Lq3Qr04
J22FXwzfBYiZkohUG3iMa9Gk1YvG25hh/dQNWBJ9LLSu+cPIw347EWboAZEemH11
3au+Nbit1ELVQGeLvcmPCfotaaJ/vCmpjMxSceM4nQKCAQEAglZssN5bul8AAMuD
blJJX9MvAjR22Umvnc/J39K7NmJKhfY9rkJE/0+S1OSAF0qkCWRFFzc0FTMwfj6u
pI5kBtlrkd/Z5vSVaGT9Bhmu/IcVJHEXUENFZmpMR0/LTfX+Y8yjTIFI17W9ta5e
K1apWPB6uZar1c1yuoS8/9ntBc91dtsTyDPn5e8dIk03GJrWonZ8V0YaxR+q8wK3
BHjeDsN6M6WoqtPW9pVZKnwMxf6f7AqoQLSZCo0ngrWBG696mAky1wbPv2NW1ec9
D8KkrV4WscAN2EEg0DQ4ViucNa5e/p0FDpVVEjxj8fwzPsg7ajv0LQ3Gb+39pt++
UEcxGwKCAQEAir+nxSJ/axoI3PEMx1iDIr4APAL2wUBGZDA8ji0NlNDg6DZ1Xd90
qyNa9eQ3KtFO0RlVC59TfcyKBhUcj3fwmjuUmiXRpHTPJMKXX5SCqyCsWzqRHwiG
LsdI4m9GZJcDpgjHTH0077rEp6pHPcUgNPe7bbgwNpOB3DC8Dns04V0EcpPLoQvJ
HSDb4Q9vUdjOx1m7/h3czabT59Cn+Fly59CEDB1L3PFK52YuigfLaZCC9zxFoCC7
nGpK4kn7ryYCT+0lZp1CL1wc+OhCMW+vgrcqKCBlxqsztj+kLrilSRKNR0JUZkEk
7bwnQPxFthYRg7wp0wCYQzwyMNBFGqmF4QKCAQAOpmoxHQasUy4VJwTGjYrl8lqi
U6Em7t/6oPXj221znRZ6cYpjo38aiW7EWx0a6vfsuSG2GKetp8taVoqzK/q2gBeg
ZK4Zp9XYeArukO2wCC5+j2ihKOXkxhtUN3Ad7TdIJ8mDSR0FfhWw/K9dgaokzLsp
s21+/TSGjpJKxv6/FswEzNBMDGLFzJvzJ3aS7y+2mo1ID3W7ietIlIlsQoU04VXV
+ok5BNu4nDJC+/oT/rhQQ3tykkftbHRwLr8s7lKeFn91/oii2hnRJRFJG6V+SyC7
y57fkttZb1aOVNOvH6FBMrlmwWHR3xW+mke9dKR1FDis2tu9OACPqggsIKVx
-----END RSA PRIVATE KEY-----
"""
cert = M2Crypto.X509.X509()
cert.set_version(2)
cert.set_serial_number(12345)
not_before = M2Crypto.ASN1.ASN1_UTCTIME()
not_before.set_time(1443539348)
cert.set_not_before(not_before)
not_after = M2Crypto.ASN1.ASN1_UTCTIME()
not_after.set_time(1453539348)
cert.set_not_after(not_after)
bio = M2Crypto.BIO.MemoryBuffer()
rsa = M2Crypto.RSA.load_key_string(private_key_pem)
rsa.save_pub_key_bio(bio)
rsapubkey = M2Crypto.RSA.load_pub_key_bio(bio)
evppubkey = M2Crypto.EVP.PKey()
evppubkey.assign_rsa(rsapubkey)
cert.set_pubkey(evppubkey)
cert_pem = cert.as_pem()
loadcert = M2Crypto.X509.load_cert_string(cert_pem)
print loadcert.as_pem()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment