Re: M2Crypto convert key from PEM to DER ?

Mads Kiilerich <[email protected]> Wed, 8 Apr 2009 02:19:49 +0200
Newsgroups gmane.comp.python.cryptography
Message-ID <[email protected]>
This is a cryptographically signed message in MIME format.

--------------ms000605000706020009060301
Content-Type: text/plain; charset=windows-1252; format=flowed
Content-Transfer-Encoding: quoted-printable

Hans Lellelid wrote, On 04/08/2009 01:02 AM:
> I'd like to use M2Crypto to to convert a server key from PEM format to =

> DER. Specifically, I'd like to replace the following openssl command:
>
> *openssl rsa =96in input.key =96inform PEM =96out output.key =96outform=
 DER
>
> I think I understand how to do something similar with the certs, but=20
> haven't figured out how to do this with just the private key. I'm sure =

> I'm missing something; can anyone provide any tips?

Using M2Crypto for that might be overkill, though it would be nice not=20
to have to write it from scratch every time.

Untested and mostly from memory which might be wrong:

pem =3D open('cert.pem')
der =3D ''.join(l.strip() for l in=20
pem.read().split('-----')[2].splitlines()).decode('base64')
open('cert.der', 'w').write(der)

/Mads


--------------ms000605000706020009060301
Content-Type: application/x-pkcs7-signature; name="smime.p7s"
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename="smime.p7s"
Content-Description: S/MIME Cryptographic Signature

MIAGCSqGSIb3DQEHAqCAMIACAQExCzAJBgUrDgMCGgUAMIAGCSqGSIb3DQEHAQAAoIIK9jCC
BXcwggRfoAMCAQICBEVxG2MwDQYJKoZIhvcNAQEFBQAwMTELMAkGA1UEBhMCREsxDDAKBgNV
BAoTA1REQzEUMBIGA1UEAxMLVERDIE9DRVMgQ0EwHhcNMDgwMzE1MTYwODQxWhcNMTAwMzE1
MTYzODQxWjB/MQswCQYDVQQGEwJESzEpMCcGA1UEChMgSW5nZW4gb3JnYW5pc2F0b3Jpc2sg
dGlsa255dG5pbmcxRTAeBgNVBAMTF01hZHMgS3Jpc3RpYW4gS2lpbGVyaWNoMCMGA1UEBRMc
UElEOjkyMDgtMjAwMi0yLTU1NDk5OTQ5Nzc5NzCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC
gYEAnGcH00IPm9qDo+Pt15b7Jm+WXPzbbEesg7atiZWlwe23TZQpEqvS8Rc8VOUVS+ATWbSO
Q3uLJ5+PXfJw1P1D2lGIhUHBRbQ5CpCTonC4vYJwP9WtRiw9wddyxm5zMPrdHby+toCCu+PG
FnFevjaHHdEmGVAZxSqFgSkjEui1n9UCAwEAAaOCAsswggLHMA4GA1UdDwEB/wQEAwID+DAr
BgNVHRAEJDAigA8yMDA4MDMxNTE2MDg0MVqBDzIwMTAwMzE1MTYzODQxWjCCATcGA1UdIASC
AS4wggEqMIIBJgYKKoFQgSkBAQEBAzCCARYwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2Vy
dGlmaWthdC5kay9yZXBvc2l0b3J5MIHiBggrBgEFBQcCAjCB1TAKFgNUREMwAwIBARqBxkZv
ciBhbnZlbmRlbHNlIGFmIGNlcnRpZmlrYXRldCBn5mxkZXIgT0NFUyB2aWxr5XIsIENQUyBv
ZyBPQ0VTIENQLCBkZXIga2FuIGhlbnRlcyBmcmEgd3d3LmNlcnRpZmlrYXQuZGsvcmVwb3Np
dG9yeS4gQmVt5nJrLCBhdCBUREMgZWZ0ZXIgdmlsa+VyZW5lIGhhciBldCBiZWdy5m5zZXQg
YW5zdmFyIGlmdC4gcHJvZmVzc2lvbmVsbGUgcGFydGVyLjBBBggrBgEFBQcBAQQ1MDMwMQYI
KwYBBQUHMAGGJWh0dHA6Ly9vY3NwLmNlcnRpZmlrYXQuZGsvb2NzcC9zdGF0dXMwHQYDVR0R
BBYwFIESbWFkc0BraWlsZXJpY2guY29tMIGEBgNVHR8EfTB7MEugSaBHpEUwQzELMAkGA1UE
BhMCREsxDDAKBgNVBAoTA1REQzEUMBIGA1UEAxMLVERDIE9DRVMgQ0ExEDAOBgNVBAMTB0NS
TDI3NDQwLKAqoCiGJmh0dHA6Ly9jcmwub2Nlcy5jZXJ0aWZpa2F0LmRrL29jZXMuY3JsMB8G
A1UdIwQYMBaAFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GA1UdDgQWBBRAoXtPdy7VkvorafqL
RJxfULtp9TAJBgNVHRMEAjAAMBkGCSqGSIb2fQdBAAQMMAobBFY3LjEDAgOoMA0GCSqGSIb3
DQEBBQUAA4IBAQCixHzdKApFGWsXgMJz16/8GCVGYBLKeW/M9Xju0i1PPgjWJ5rnOa7hIJky
2AfXPq5ovwi796s3R8hNZQ8k08MWrmiVLyALwrsGfRkrj0vry5pX6vtHKLpoldjKNQau6jes
ObqZClmhQ6+9Nyv+bjmJGqETJ0IMFQmwc9xSbG/zfzWfpNC3pUrVRvs6wHjodokCM5778108
TPHfmlbt2OJ/SJUevzWSpwNQz5I+sg6D8T0nqskLyqFRNQsAHDhCgWYa1d/iDbbHDCn0I6wx
JvKF+B+PCPrHijvz2c3FCl91d8e80wjNtIFewN62Mhmt09oVcj1g0op+GFsT9MsD1dbDMIIF
dzCCBF+gAwIBAgIERXEbYzANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJESzEMMAoGA1UE
ChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wODAzMTUxNjA4NDFaFw0xMDAzMTUx
NjM4NDFaMH8xCzAJBgNVBAYTAkRLMSkwJwYDVQQKEyBJbmdlbiBvcmdhbmlzYXRvcmlzayB0
aWxrbnl0bmluZzFFMB4GA1UEAxMXTWFkcyBLcmlzdGlhbiBLaWlsZXJpY2gwIwYDVQQFExxQ
SUQ6OTIwOC0yMDAyLTItNTU0OTk5NDk3Nzk3MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
gQCcZwfTQg+b2oOj4+3Xlvsmb5Zc/NtsR6yDtq2JlaXB7bdNlCkSq9LxFzxU5RVL4BNZtI5D
e4snn49d8nDU/UPaUYiFQcFFtDkKkJOicLi9gnA/1a1GLD3B13LGbnMw+t0dvL62gIK748YW
cV6+Nocd0SYZUBnFKoWBKSMS6LWf1QIDAQABo4ICyzCCAscwDgYDVR0PAQH/BAQDAgP4MCsG
A1UdEAQkMCKADzIwMDgwMzE1MTYwODQxWoEPMjAxMDAzMTUxNjM4NDFaMIIBNwYDVR0gBIIB
LjCCASowggEmBgoqgVCBKQEBAQEDMIIBFjAvBggrBgEFBQcCARYjaHR0cDovL3d3dy5jZXJ0
aWZpa2F0LmRrL3JlcG9zaXRvcnkwgeIGCCsGAQUFBwICMIHVMAoWA1REQzADAgEBGoHGRm9y
IGFudmVuZGVsc2UgYWYgY2VydGlmaWthdGV0IGfmbGRlciBPQ0VTIHZpbGvlciwgQ1BTIG9n
IE9DRVMgQ1AsIGRlciBrYW4gaGVudGVzIGZyYSB3d3cuY2VydGlmaWthdC5kay9yZXBvc2l0
b3J5LiBCZW3mcmssIGF0IFREQyBlZnRlciB2aWxr5XJlbmUgaGFyIGV0IGJlZ3LmbnNldCBh
bnN2YXIgaWZ0LiBwcm9mZXNzaW9uZWxsZSBwYXJ0ZXIuMEEGCCsGAQUFBwEBBDUwMzAxBggr
BgEFBQcwAYYlaHR0cDovL29jc3AuY2VydGlmaWthdC5kay9vY3NwL3N0YXR1czAdBgNVHREE
FjAUgRJtYWRzQGtpaWxlcmljaC5jb20wgYQGA1UdHwR9MHswS6BJoEekRTBDMQswCQYDVQQG
EwJESzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTEQMA4GA1UEAxMHQ1JM
Mjc0NDAsoCqgKIYmaHR0cDovL2NybC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwHwYD
VR0jBBgwFoAUYLWF7FZkfhIZJ2cdUBVLc647+RIwHQYDVR0OBBYEFEChe093LtWS+itp+otE
nF9Qu2n1MAkGA1UdEwQCMAAwGQYJKoZIhvZ9B0EABAwwChsEVjcuMQMCA6gwDQYJKoZIhvcN
AQEFBQADggEBAKLEfN0oCkUZaxeAwnPXr/wYJUZgEsp5b8z1eO7SLU8+CNYnmuc5ruEgmTLY
B9c+rmi/CLv3qzdHyE1lDyTTwxauaJUvIAvCuwZ9GSuPS+vLmlfq+0coumiV2Mo1Bq7qN6w5
upkKWaFDr703K/5uOYkaoRMnQgwVCbBz3FJsb/N/NZ+k0LelStVG+zrAeOh2iQIznvvzXTxM
8d+aVu3Y4n9IlR6/NZKnA1DPkj6yDoPxPSeqyQvKoVE1CwAcOEKBZhrV3+INtscMKfQjrDEm
8oX4H48I+seKO/PZzcUKX3V3x7zTCM20gV7A3rYyGa3T2hVyPWDSin4YWxP0ywPV1sMxggI3
MIICMwIBATA5MDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBP
Q0VTIENBAgRFcRtjMAkGBSsOAwIaBQCgggFUMBgGCSqGSIb3DQEJAzELBgkqhkiG9w0BBwEw
HAYJKoZIhvcNAQkFMQ8XDTA5MDQwODAwMTk0OVowIwYJKoZIhvcNAQkEMRYEFJn7iQQSJDKy
d7sNUoFWRL+cpd1FMEgGCSsGAQQBgjcQBDE7MDkwMTELMAkGA1UEBhMCREsxDDAKBgNVBAoT
A1REQzEUMBIGA1UEAxMLVERDIE9DRVMgQ0ECBEVxG2MwSgYLKoZIhvcNAQkQAgsxO6A5MDEx
CzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNUREMxFDASBgNVBAMTC1REQyBPQ0VTIENBAgRFcRtj
MF8GCSqGSIb3DQEJDzFSMFAwCwYJYIZIAWUDBAECMAoGCCqGSIb3DQMHMA4GCCqGSIb3DQMC
AgIAgDANBggqhkiG9w0DAgIBQDAHBgUrDgMCBzANBggqhkiG9w0DAgIBKDANBgkqhkiG9w0B
AQEFAASBgEhtpYY3rnQv1kU/89S7n8cWIdqIpX0QstXbPxW9Yqih8UbhqN0Rz4Bdp7UCheHW
Cz+czQJBOqW02RN6lXwyZcTbjo0PgvDB2ybIx7BNz6cRUh+WOWg3oPyZGix4pCrEeFCcYS4Z
hZAC2BCEomUUDSZGLMwLHmHJALtInzop4rgxAAAAAAAA
--------------ms000605000706020009060301--