0

I have one RSA PRIVATE KEY and one CERTIFICATE in one line, and I have to split it to one .key and .crt file.

Is it possible with sed or/and awk?

EDI1: example (as you can see its literally one line)

-----BEGIN RSA PRIVATE KEY----- MIIEpAIBAAKCAQEAoigkOEwqD/d5VsRgCZx8ZjTG+2lMZ+q1QyRaOXZ0OXIFWoKq JlFKI2BauRYl83pM1CLcwrdmnPGGyU9ld5JkWgj9zwI5O7kvyl0sW9ekiDGRdyT+ AEGV5E5aCiki9hgrj61CyvGV4audP3jG+dNi07yFnm40uC1HkrKtFDgiTYMDb2L4 m/UP8pszFiar9rBY0AEhL55gLREX4a/QDxbmP5puUvTErgt0mfbe444+ke5fxxTZ BKhZbVhaPEVVcUVgPlw1EH9wmgj4fTnlNDZBPVqvej8CEt4y/RcEOZ6nPddjBZm+ inr3QbOHc9bvUy5El8RlkqCU/kWkgj1sZlkMGwIDAQABAoIBAG3c6H1EDRN4Rbtl nPOmFBpjE5VuiBe3y0tMK9zWxnPNLpdeA82mMaa6N31C5j+J0te/Lva1r04RzZJC uqpCgr8FbIB+LyypkRl3+v/WoGCtxLKGW5js1pMyCorryAYX5huX9bLt7vBQh19j gtvsPf7asWTfodROyTk42U7joUoFr4TiqBftjVGl3gLB1AidLMHukbiCgRoqGC3v H80VAmc8bt8S46MOvfw1p1Wj/hfyz57pwrU/8/+FHFExzjtkA5Kd8KidzcBc6OnA 3dfsdfsdfdghhhrdfghgfhfghfghhNR0ze6qvlQc6+QQcVIuKxOhmObtBsagnAHJ eqr7FXECgYEAzy881viDqAmsbFC5BN/4GRdUK5nKWFbjD8bo8PbCFMh8Mb+K/GKc dHhUZSMKGQ4u2NNI8fcnh3M0F2zdoaVqZndwr9GxMWyPoB+KBeelDFIWHcY7z55c N2r4CRyWAOMU4lkvBn5RQz1Qxv2de/Tbr3VdxT1tkbWIruIl+wisfwUCgYEAyFz2 xJRugSIBH89haeoHs4JqIKiuHm7+UHkawtfGqrg9jeJDfs7N4hlha5Wf7SDaXMAb Rc8MJGpU/fH5bz/DgSi0ruRjaOs/Yglik4VcnLosM6mgVh5cGa96al2SbEEBck/Q PFiKWbOI3J1npb5sy/0SNGZG8KzRvwkG2NqmCJ8CgYEAydrBEMSBKPd7yPAAwxIe 2vtSo0Qr01Ob16Q5EYOoZa1K6wEuPWUp/4O43ex8ixq5Y8C+ghgFqD8CkowbhsDt 4DUgUfwgAgI+EIiJ5eThdhaHu6yGW2pzd/6898ulDeowT7MKUO5C6BrWF3nCtKFE ZDcaC/AkT2EpcRGeZWz2+q0Cgfhfght454564Sgt7j6k0TnYUzXZzQZWJuwYds1l +RjhiGWCrQDdNml6FhltHq/miWkDwbDPaSUjaD6Hh/aJ2d50kXgv3Z7diQZ2G5wD dlG5DmyKkDRe5oyUfkdvK09UkOmp8IkQpOSgfJ0s5kOS/dEPgcns1JNoo1s6N4dF cY6e0QKBgQDNm1nhfPHzkLlYqvpa6k8dF+iHBz2vne3EZ9B6mXIJXTsCc0OwEusX 8zin8oMEBLcJCcH3kdLTnjdtiN7nxukUjaR48g/EiOtiQAxqT69bEiNzRB3o0pAC f9NOiPKEnob2xeQYTptm4AlY/WblAyXbn6ZmzyIMf6mOTRdh2K07QQ== -----END RSA PRIVATE KEY----- -----BEGIN CERTIFICATE----- MIID5DCCAsygAwIBAgIUNoBfD4EQB61SOlUZautwaZWeedQwDQYJKoZIhvcNAQEL BQAwETEPMA0GA1UEAxMGbWljYWRvMB4XDTE5MDEyNTE2MjAzMloXDTIwMDEyNTE2 MjEwMlowHDEaMBgGA1UEAxMRd29ya2Vybm9kZS5taWNhZG8wggEiMA0GCSqGSIb3 DQEBAQUAA4IBDwAwggEKAoIBAQCiKCQ4sdfsdfdsfsdfsfsmNMb7aUxn6rVDJFo5 dnQ5cgVagqomUUojYFq5FiXzekzUItzCt2ac8YbJT2V3kmRaCP3PAjk7uS/KXSxb 16SIMZF3JP4AQZXkTloKKSL2GCuPrULK8ZXhq50/eMb502LTvIWebjS4LUeSsq0U OCJNgwNvYvib9Q/ymzMWJqv2sFjQASEvnmAtERfhr9APFuY/mm5S9MSuC3SZ9t7j jj6R7l/HFNkEqFltWFo8RVVxRWA+XDUQf3CaCPh9OeU0NkE9Wq96PwIS3jL9FwQ5 nqc912MFmb6KevgdfgdfgdfggddgdgWSoJT+RaSCPWxmWQwbAgMBAAGjggEnMIIB IzAOBgNVHQ8BAf8EBAMCA6gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC MB0GA1UdDgQWBBTkq4+xrl/ODW8rrp3BdTRw849a9jAfBgNVHSMEGDAWgBRbQpEM sHkbVhoSNGSHqhu+gJBgWTBRBggrBgEFBQcBAQRFMEMwQQYIKwYBBQUHMAKGNWh0 dHA6Ly9zZWN1cml0eV9wb2xpY3lfbWFuYWdlcjo1MDAzL3YxLjAvbm9kZWNlcnRz L2NhMBwGdsfsdfsdfBOCEXdvcmtlcm5vZGUubWljYWRvMEEGA1UdHwQ6MDgwNqA0 oDKGMGh0dHA6Ly9zZWN1cml0eV9wb2xpY3lfbWFuYWdlcjo1MDAzL3YxLjAvbm9k ZWNybDANBgkqhkiG9w0BAQsFAAOCAQEAtnBFseEJBzMGMuqRYeXa0rFGcZUXK4S8 HXvpGU95IX9ztzkjhjkhjkhjkhjkhrqdSk2Q3+GVy3mAGhRpdwwpY5fwlG6wBlOk 4iQOzMVzjYSwuXHlCwDlWEuNx3Kn9gBggtz+6Bc+Rs3o2y9L82O14fYBeDPKKh/1 /VBDvVnGlXjXy8FJWgp4ZFO4mtauq4SaQgC/77N/JOXh/cBwt84fgMM0UKplawwP V9Jh+Rujsdfsdfsdffsdfsfsdfsdf439Tgy9/7FID378ZoWRAHYkMljow+ZSt9pF +p7GR/BLA+vfcWV2482KeYmxJmaelGOghrdf+83I3tVpBsqXz2Or3Q== -----END CERTIFICATE-----

And I have to convert to this format:

-----BEGIN RSA PRIVATE KEY-----
MIIEpAIBAAKCAQEAoigkOEwqD/d5VsRgCZx8ZjTG+2lMZ+q1QyRaOXZ0OXIFWoKq
JlFKI2BauRYl83pM1CLcwrdmnPGGyU9ld5JkWgj9zwI5O7kvyl0sW9ekiDGRdyT+
AEGV5dsfdsfsdfsdfsdfsdfdsfsdf3jG+dNi07yFnm40uC1HkrKtFDgiTYMDb2L4
m/UP8pszFiar9rBY0AEhL55gLREX4a/QDxbmP5puUvTErgt0mfbe444+ke5fxxTZ
BKhZbVhaPEVVcUVgPlw1EH9wmgj4fTnlNDZBPVqvej8CEt4y/RcEOZ6nPddjBZm+
inr3QbOHc9bvUy5El8RlkqCU/kWkgj1sZlkMGwIDAQABAoIBAG3c6H1EDRN4Rbtl
nPOmFBpjE5VuiBsdfsdfsdfsdfsfdsfsdfsdfsdfsdfsdj+J0te/Lva1r04RzZJC
uqpCgr8FbIB+LyypkRl3+v/WoGCtxLKGW5js1pMyCorryAYX5huX9bLt7vBQh19j
gtvsPf7asWTfodROyTk42U7joUoFr4TiqBftjVGl3gLB1AidLMHukbiCgRoqGC3v
H80VAmc8bt8S4dsfsdfdsfsdfsdfsdfsdfsdfsdfsdfsdfsdffKd8KidzcBc6OnA
3OCAX8STj9NVm5a6X8pgWLl/bmnYhNR0ze6qvlQc6+QQcVIuKxOhmObtBsagnAHJ
eqr7FXECgYEAzy881viDqAmsbFC5BN/4GRdUK5nKWFbjD8bo8PbCFMh8Mb+K/GKc
dHhUZSMKGQ4u2NNI8fcnh3M0F2zdoaVqZndwr9GxMWyPoB+KBeelDFIWHcY7z55c
N2r4CRdsfdsfsdfsdfsdfsdfsdsfdsfbr3VdxT1tkbWIruIl+wisfwUCgYEAyFz2
xJRugSIBH89haeoHs4JqIKiuHm7+UHkawtfGqrg9jeJDfs7N4hlha5Wf7SDaXMAb
Rc8MJGpU/fH5bz/DgSi0ruRjaOs/Yglik4VcnLosM6mgVh5cGa96al2SbEEBck/Q
PFiKWbOI3J1npb5sy/0SNGZG8KzRvwkG2NqmCJ8CgYEAydrBEMSBKPd7yPAAwxIe
2vtSo0Qr01Ob16Q5EYOoZa1K6wEuPWUp/4O43ex8ixq5Y8C+ghgFqD8CkowbhsDt
4DUgUfwgAgI+EIiJ5eThdhaHu6yGW2pzd/6898ulDeowT7MKUO5C6BrWF3nCtKFE
ZDcaC/AkT2EpcRGeZWz2+q0CgYAS22z+I1ojHSgt7j6k0TnYUzXZzQZWJuwYds1l
+RjhiGWCrQDdNmsdfsdfsdfsdfsdfdsfdsfsdfsdfsdf2d50kXgv3Z7diQZ2G5wD
dlG5DmyKkDRe5oyUfkdvK09UkOmp8IkQpOSgfJ0s5kOS/dEPgcns1JNoo1s6N4dF
cY6e0QKBgQDNm1nhfPHzkLlYqvpa6k8dF+iHBz2vne3EZ9B6mXIJXTsCc0OwEusX
8zin8oMEBLcJCcH3kdLTnjdtiN7nxukUjaR48g/EiOtiQAxqT69bEiNzRB3o0pAC
f9NOiPKEnob2xeQYTptm4AlY/WblAyXbn6ZmzyIMf6mOTRdh2K07QQ==
-----END RSA PRIVATE KEY-----
-----BEGIN CERTIFICATE-----
MIID5DCCAsygAwIBAgIUNoBfD4EQB61SOlUZautwaZWeedQwDQYJKoZIhvcNAQEL
BQAwETEPMA0GA1UEAxMGbWljYWRvMB4XDTE5MDEyNTE2MjAzMloXDTIwMDEyNTE2
MjEwMlowHDEaMBgGA1UEAxMRd29ya2Vybm9kZS5taWNhZG8wggEiMA0GCSqGSIb3
DQEBAQUAA4IBDwAwggEKAodsfsdfdsfsfdsdfsdfsdfsdfdsfdssaUxn6rVDJFo5
dnQ5cgVagqomUUojYFq5FiXzekzUItzCt2ac8YbJT2V3kmRaCP3PAjk7uS/KXSxb
16SIMZF3JP4AQZXkTloKKSL2GCuPrULK8ZXhq50/eMb502LTvIWebjS4LUeSsq0U
OCJNgwNvYvib9Q/ymzMWJqv2sFjQASEvnmAtERfhr9APFuY/mm5S9MSuC3SZ9t7j
jj6R7l/HFNkEqFltWFo8RVVxRWA+XDUQf3CaCPh9OeU0NkE9Wq96PwIS3jL9FwQ5
nqc912MFmb6KevdBs4dz1u9TLkSXxGWSoJT+RaSCPWxmWQwbAgMBAAGjggEnMIIB
IzAOBgNVHQ8BAf8EBAMCA6gwHQYDVR0lBBYwFAYIKwYBBQUHAwEGCCsGAQUFBwMC
MB0GA1UdDgQWBBTkq4+xrl/ODW8rrp3BdTRw849a9jAfBgNVHSMEGDAWgBRbQpEM
sHkbVhoSNGSHqhu+gJBgWTBRBggrBgEFBQcBAQRFMEMwQQYIKwYBBQUHMAKGNWh0
dHA6Ly9zZWN1cml0eV9wb2xpY3lfbWdsfdssdfdsfdsfdsdsfsdfsdffZWNlcnRz
L2NhMBwGA1UdEQQVMBOCEXdvcmtlcm5vZGUubWljYWRvMEEGA1UdHwQ6MDgwNqA0
oDKGMGh0dHA6Ly9zZWN1cml0eV9wb2xpY3lfbWFuYWdlcjo1MDAzL3YxLjAvbm9k
ZWNybDANBgkqhsdfsdfsdfsdfdsffQEAtnBFseEJBzMGMuqRYeXa0rFGcZUXK4S8
HXvpGU95IX988hlv6d4lKc9gEIFBZrqdSk2Q3+GVy3mAGhRpdwwpY5fwlG6wBlOk
4iQOzMVzjYSdsfdsfsdfsfsdfsfsdfdggtz+6Bc+Rs3o2y9L82O14fYBeDPKKh/1
/VBDvVnGlXjXy8FJWgp4Zfsdfdsfdsfsdfsdfsdfdsdsfddfsdsfsdf0UKplawwP
V9Jh+Ruj0Q1MVPjYisNypyZ5F/snO2v9Tgy9/7FID378ZoWRAHYkMljow+ZSt9pF
+p7GR/BLA+vfcWV2482KeYdsfsdfsdfdsfdsfdsfsdfsfd2Or3Q==
-----END CERTIFICATE-----
2
  • 1
    It would be easier if you had here the file structure with some altered data. Commented Jan 25, 2019 at 16:28
  • @RuiFRibeiro You're right, I added example.
    – Crowor
    Commented Jan 25, 2019 at 16:56

2 Answers 2

3
delimiter='-{5}[^-]+-{5}'
key=1
crt=2

# get the key
grep -o -P "\\${delimiter}.*?${delimiter}" cert | cut -d $'\n' -f $key | fmt -w 64 > the.key

# get the certificate
grep -o -P "\\${delimiter}.*?${delimiter}" cert | cut -d $'\n' -f $crt | fmt -w 64 > the.crt

The output files are the.key and the.crt.

I assume your intention is that .key and .crt are extensions instead of hidden files.

Also, cert is the input file that contains the key and the certificate all in one line.

2
  • I'm very grateful, you saved my weekend, thank you!
    – Crowor
    Commented Jan 25, 2019 at 17:22
  • @G3ph4z I almost forgot to mention what I named the input file. I've just edited my answer.
    – Niko Gambt
    Commented Jan 25, 2019 at 17:24
0

Using fmt -w 35 file where file is the single line file, will get it into the exact format that you show in the question. fmt is a simple text formatter that will fold long lines and fmt -w 35 would try to fold the lines in in the file to match 35 characters per line, but would not break apart words that are too long, which is what makes it work in this case.

The awk command

awk 'BEGIN { of="file.pem" } { print >of } /^-----END/ { of="file.crt" }'

would read this and output the first bit to file.pem and the second bit to file.crt. It does this by defining the variable of ("out file") at the start to the first filename, and then changing it to the second filename when a line matching the pattern ^-----END is found. All lines in the output from fmt are printed to whatever filename of happens to contain.

All together:

fmt -w 35 file |
awk 'BEGIN { of="file.pem" } { print >of } /^-----END/ { of="file.crt" }'

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .