Skip to content

Commit

Permalink
add test for password protected p12 file
Browse files Browse the repository at this point in the history
  • Loading branch information
nitram509 committed Oct 2, 2024
1 parent faf2f7a commit 2bc5ed5
Show file tree
Hide file tree
Showing 8 changed files with 202 additions and 13 deletions.
9 changes: 5 additions & 4 deletions keystore_load.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"errors"
"fmt"
"io"

"software.sslmate.com/src/go-pkcs12"
)

Expand Down Expand Up @@ -120,10 +121,10 @@ func (ks KeyStore) loadPkcs12(r io.Reader, password []byte) error {
cert.Subject.CommonName,
cert.Subject.SerialNumber,
)
//Country, Organization, OrganizationalUnit []string
//Locality, Province []string
//StreetAddress, PostalCode []string
//SerialNumber, CommonName string
// Country, Organization, OrganizationalUnit []string
// Locality, Province []string
// StreetAddress, PostalCode []string
// SerialNumber, CommonName string
ks.m[alias] = tce
}

Expand Down
29 changes: 20 additions & 9 deletions keystore_load_test.go
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package keystore

import (
"bytes"
_ "embed"
"encoding/pem"
"os"
"testing"
Expand Down Expand Up @@ -86,21 +88,30 @@ func TestLoadKeyPassword(t *testing.T) {
assert.Equal(t, decodedPK.Bytes, actualPKE.PrivateKey, "unexpected private key")
}

func TestLoadPkcs12(t *testing.T) {
//go:embed testdata/keystore_temurin_openjdk_21.0.4_lts.p12
var fileTemurinOpenJdkKeystore []byte

func TestLoadPkcs12NoPassword(t *testing.T) {
password := []byte("")
temurinOpenJdkKeystore := bytes.NewReader(fileTemurinOpenJdkKeystore)

f, err := os.Open("./testdata/keystore_temurin_openjdk_21.0.4_lts.p12")
keyStore := New()
err := keyStore.Load(temurinOpenJdkKeystore, password)
require.NoError(t, err)

defer func() {
err := f.Close()
require.NoError(t, err)
}()
assert.Len(t, keyStore.Aliases(), 148)
}

keyStore := New()
//go:embed testdata/self_signed_certificate/cert.p12
var fileSelfSignedCertP12 []byte

err = keyStore.Load(f, password)
func TestLoadPkcs12WithPassword(t *testing.T) {
password := []byte("password")
selfSignedCert := bytes.NewReader(fileSelfSignedCertP12)

keyStore := New()
err := keyStore.Load(selfSignedCert, password)
require.NoError(t, err)

assert.Len(t, keyStore.Aliases(), 148)
assert.Len(t, keyStore.Aliases(), 1)
}
40 changes: 40 additions & 0 deletions testdata/self_signed_certificate/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@

Purpose
-------

This is a self-signed certificate, which is can be used for testing the `keystore-go` library.
It was created by using openssl CLI tool in an interactive terminal session.

Requirements
------------

* OpenSSL 3+ (using 3.3.2 3 Sep 2024 (Library: OpenSSL 3.3.2 3 Sep 2024))


Documentation, how the file were created
----------------------------------------

You need to open a terminal and enter these commands line by line:

```shell
openssl genrsa -out key.pem 4096
openssl req -new > cert.csr
openssl x509 -in cert.csr -out cert.pem -req -signkey key.pem -days 9999
openssl pkcs12 -export -out cert.p12 -in cert.pem -inkey key.pem -passin pass:pass -passout pass:password -nokeys -jdktrust anyExtendedKeyUsage -name test-name -caname test-ca-name
```
When `openssl req ...` asks you for some certificate subject information, enter the following values:

```text
Country Name (2 letter code) [AU]:de
State or Province Name (full name) [Some-State]:Brandenburg
Locality Name (eg, city) []:Potsdam
Organization Name (eg, company) [Internet Widgits Pty Ltd]:keystore-go
Organizational Unit Name (eg, section) []:github.com.pavlo-v-chernykh.keystore-go
Common Name (e.g. server FQDN or YOUR name) []:pavlo-v-chernykh.keystore-go
Email Address []:keystore-go@example.org
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:pass
An optional company name []:
```
19 changes: 19 additions & 0 deletions testdata/self_signed_certificate/cert.csr
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
-----BEGIN CERTIFICATE REQUEST-----
MIIDJzCCAg8CAQAwgcwxCzAJBgNVBAYTAmRlMRQwEgYDVQQIDAtCcmFuZGVuYnVy
ZzEQMA4GA1UEBwwHUG90c2RhbTEUMBIGA1UECgwLa2V5c3RvcmUtZ28xMDAuBgNV
BAsMJ2dpdGh1Yi5jb20ucGF2bG8tdi1jaGVybnlraC5rZXlzdG9yZS1nbzElMCMG
A1UEAwwccGF2bG8tdi1jaGVybnlraC5rZXlzdG9yZS1nbzEmMCQGCSqGSIb3DQEJ
ARYXa2V5c3RvcmUtZ29AZXhhbXBsZS5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IB
DwAwggEKAoIBAQDhRLTMre0GATUnOAVVX37M7WkaMhIBddjluXROguo8FjAn/Z8B
21hguJ8/6rv9uPRuArmb/+JyHOg2Bwt21HiG8G24J7cqLzDTbdn8k0l2hj5GG34p
zIoqup9mND7IZ3h6sbehDWYiRDpS2QMATjCSGBKiH7eY18xMGK8LEiuWNV+VJIIv
V5m6ajkOKGYjjUR5BZb7QyEeb/FARmTM9u1UG7CqXRnDWLk1Cp6/r+Kn9cmJWAvB
28o4XEFibnCLCna7qUOVa4S44z9a1s5DUFNdWvhLztE6Qwb3a/ljaPQyjiucbm5E
80fmgiecMTWyiVGc9bHAbOT//fm8n0ic3cf1AgMBAAGgFTATBgkqhkiG9w0BCQcx
BgwEcGFzczANBgkqhkiG9w0BAQsFAAOCAQEAf0tmy8I+Z+itFFiT6E1fsg4OfESi
KMHszUB3DwoKaE0LJGJ+fdd4+3Yg1w5QQO49rtaPltmTobOkZG5S4fMpuC0fD6+n
4SCK1CnMo8NKvtgiDTiS+9Aan7LOoEzqSODRbG2GKag8JX598bpp7ryvQttsy2j4
h7A1epykLt/ma7QF2fh4mTgZdS3FkFSHjycr4TjgZF4TPcWTmjfHBsM+kIQc+u2x
zeDf6VNHMnvJOYoc6rE00UvLwVQUncdYBNH9LA6s3iaPvyweRAjqSxU4pZOHSs4Q
uTVdInnYZPzWegK1iP0nU5qNfeE0E62ODayjBU8TScu+nZrgT7B/Hor2Eg==
-----END CERTIFICATE REQUEST-----
Binary file added testdata/self_signed_certificate/cert.p12
Binary file not shown.
36 changes: 36 additions & 0 deletions testdata/self_signed_certificate/cert.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
-----BEGIN CERTIFICATE-----
MIIGSzCCBDOgAwIBAgIUf8zHtQCQF+TZjO/rGYQ6VVLonLowDQYJKoZIhvcNAQEL
BQAwgcwxCzAJBgNVBAYTAmRlMRQwEgYDVQQIDAtCcmFuZGVuYnVyZzEQMA4GA1UE
BwwHUG90c2RhbTEUMBIGA1UECgwLa2V5c3RvcmUtZ28xMDAuBgNVBAsMJ2dpdGh1
Yi5jb20ucGF2bG8tdi1jaGVybnlraC5rZXlzdG9yZS1nbzElMCMGA1UEAwwccGF2
bG8tdi1jaGVybnlraC5rZXlzdG9yZS1nbzEmMCQGCSqGSIb3DQEJARYXa2V5c3Rv
cmUtZ29AZXhhbXBsZS5vcmcwIBcNMjQxMDAyMTMwMTU5WhgPMjA1MjAyMTcxMzAx
NTlaMIHMMQswCQYDVQQGEwJkZTEUMBIGA1UECAwLQnJhbmRlbmJ1cmcxEDAOBgNV
BAcMB1BvdHNkYW0xFDASBgNVBAoMC2tleXN0b3JlLWdvMTAwLgYDVQQLDCdnaXRo
dWIuY29tLnBhdmxvLXYtY2hlcm55a2gua2V5c3RvcmUtZ28xJTAjBgNVBAMMHHBh
dmxvLXYtY2hlcm55a2gua2V5c3RvcmUtZ28xJjAkBgkqhkiG9w0BCQEWF2tleXN0
b3JlLWdvQGV4YW1wbGUub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKC
AgEApYjRiOHLQnvadGxINiuOVgbS5hBdhugKxzGg3pGiMwNgreOSdM492RvgZ53i
anGaRyAxGJHInKhifsTcL0Pzhr0HlZreRoG5vEzR3DdZmK4sL3N8itwR1OI28BSM
A9MoQwYwUrARvvGt5XxV53K0FB+t7knd9D3bSnoNwm/VXZ/ygnx/GPIy9n4Obn7m
RGxVG8ZENc7+kjUQJ3mK96tRe7j6c11B8fseA1X16NoX0fjfy2N0/1ctai3gBSQu
NUhQ1ZAEVk3iy6fMrYpwZAuIUZVPQzviYCABhJmVSSl1XGr0CNr0bT7MOqyDZJau
9mz1NvPwxssujv20SiqxiXrrH6WPTjjd5HhgjhV6TwTuljyZIWPBrMTRp30aZqTP
sUPTgoew5IDveXaZ+dFpIDJfxTHh/razDRrnShpj1/kSSlqt/HmmBTTFQrRdD50k
p6sBLqbGwukKKaU4DnQ6L98xUj9/6p0dHut2eA0sCMZjOVnDh/sPsDKADKTyqzgr
KZ6g6Nra59FapWwvETEV0MWHzNT0z10FnvCxwYE4ldQDSSU2Yscu9KmUNdNbDoar
0DqlTKWEpu4Cg+rpJDKg01yZI9E00sMLSDaNvsTnLovCV8UJo9Yx4NY4op642y86
LvPz4C2yVwM0FaamEMRkcTS0jshl380GGGPnptIQZn8iYRcCAwEAAaMhMB8wHQYD
VR0OBBYEFD8n1rbUCbG6fz+saA+JmY5/XZ3SMA0GCSqGSIb3DQEBCwUAA4ICAQBJ
MPhckQD3lzzb0QCBtTGo4AXT26IUOGuaI+fNOxRaNGNbAdF2k1P3jhu7trJyvBBC
2JBbsISt3WnvRUPISdgl3kQMcii6OqHrFRul08bvmjE3/DtPlz81fiXV2NMHcj9V
2oysXNpaI6Qu9l0H4bHcDPwUmkD+oJc18Jy4xk5wiEc4r0ZmuQfNfSkFUZCx7ULa
tQMFdRuvKiOOWM2hmAvIRTxt8vxY0bukQLBJZZ9m3i2TrmZeaGjbVaj2EnC/8iug
vRXVM2r5oW2w58qfCCagjV7RfaZ8kQFTotj6r0u4FWIMigf6e3pUoy46vsHvVTqm
OhswTGV0r1S60bXXFrqcBIPTr5aw4BuxNeGRfh1qJh5JAFNLrIb0cTYLG5gKCEGd
ra2/WeIH57Y7r1cMLRKZ+RlggjtYD263Ih8vc11Jjoig777mKjMO1NV/ddfQGiPn
5DBzK8VMdoFXriJm00AoiESVdQV3rBMLsVk+BcT+p2ZiECwBydki5wecHG5d1wCq
t4LvxKAy+8fqwg9b5NUofHRD4ZaQSE5qMjL79xc6OrdrjDWEc6OxIH1G6bCBpoH3
L0a5dXvl3VDAOkdJiXqluAFK12wAMmKTsiBwLXOO1/7VYDMFiczFjoxb9C3HZNvO
0srBAqp0ZhTxrqvgFWhjhMxBRl3mLvBtCUIFMJCv4Q==
-----END CERTIFICATE-----
52 changes: 52 additions & 0 deletions testdata/self_signed_certificate/key.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
-----BEGIN PRIVATE KEY-----
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
YWQoh5c8uQY9+lL5qw0Ej3BgEsPFyA==
-----END PRIVATE KEY-----
30 changes: 30 additions & 0 deletions testdata/self_signed_certificate/privkey.pem
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
-----BEGIN ENCRYPTED PRIVATE KEY-----
MIIFJDBWBgkqhkiG9w0BBQ0wSTAxBgkqhkiG9w0BBQwwJAQQphmD9D6Uo8ilwmxH
QP13VAICCAAwDAYIKoZIhvcNAgkFADAUBggqhkiG9w0DBwQICJuTMHNghTYEggTI
HmhV0OKT83thajIyyW7/4wfC161ysKE4HwqHUGUiELqrFT3aYUU+0KN8tzXweau3
3a+mFPTzhfO6s1wHW7w83PGaHsfpLcV0gM4Bzy0jksSKj6xhxqSUAKlDuJPJLXoS
EVICIIbszHB3peIfxFA/SuyZcA808Y0rlxwIM4aCoawOvPpnBebgODF/n0AsdesN
FCMzEnbxS6n2JpRWyXpaYA5XnWGbWTGOfe6NwhL7dpcP2G/SfRd/WLlBdR42VGyE
GpgNQiSbj6iF9ZhzwU4sgXkl919VnXewV/yQn6vBRACauHrCAfUux5r76LHRN+en
pqiSCKaNRpO43nyBAJh6xub/aii1AETESVSwoErTuYy8eRnae8alhqgyEuyXlDSn
XWG4pQLYq1G3uumG12bWoDuXFoNv4SPygr/44g0zC4bozdvSw1058/yFyHOO5MPj
Wwtx1wwvnbGdIYCZXVEaaPbmBI3RiH/UQu7N/3U4tDY4e70DuRM5M/PgIv7IcDT4
J292eRVucM30cz//4u+8ELgFUr8JvxDnWIuIoA/oZWeyk6pr9Iaj3kqyLimX1sIz
vu/VgreApWubl39C5LF7FPimOKj1DkpYG140ORHcwPkCEuD1gKyy0uffRxaPxo75
wIzb3bf+bN88pinV3t4vv2Y3cDXOqQD3ddMTaKXzYueSGRw7BwebCZkolOST/Ge3
lPOTMFko6x5Io4e9F/XTgzi7JP4X62Sh4jCyUMSjUGtPEtJrWd/n/SmfV4LLCic+
c1pIOSDS5jFwbquH2gZR+YPcPhFe93HQbMn8NXtTQ+PRPESoMtTdsVpKEqHrLm8V
B8bjiZd/AC47mcrnDFIuHdk1CDCSW9F+0MwitGChg0FCsALVoehlQWk/gQAJqI6P
j99/Ej07s0iE2n56wuy0szwPhY8rhLLdV05P2oMLlrIqOFX1tf/d2Gp84t1G5LqH
5aeZwpswsDY/F5Wd6KqQrf9ExHDQsXoj5d8q4U/5AtB6wyAoBbhYGA5loKq29opb
FnJJtyY/GOjQTFXz7YdgQ+alNp8XUcaMN+Lv23VLbJ1zvQ0J67+tZ6sFxP3BbDEt
PItN0kOo90C1e5ysvT9MBsYVF/eGwzFUzyDLVvxPx5PRbYOBEnI5llUY08+aEu7v
6AHJ0jhVTKOR+HdQ8y0STjReuJmfllYUgR/MEPoGydMyB0vhHqHwHjcWGX6OBnDh
BMTp+vR8Bn5qZKaIxBuPtP4n4H0YEidUKHsKk5IrMj74epTYbsBVJJVMq3MGX8Si
fJYCv3pyVq3csisYAJnIwQGBt75wGd6t9h3ccQ9F82gXND0RssGwB2alOvSQmt25
097LMjky6AXTc9jLiN/+Sbf53HMl6egUSGe4SBI7MIJvKQU8F62mbLT40IN7pFax
ad4FGwQLMa8RxjrY0bsUbfW2zTyxpCkgVCVy/pEYUS8y6OpA60gj1WtlkVs3NI8n
2mTOv9/OXWzS5die0cNHlyss/yf14wZTeY7OGtAaLLhM3vm92gNA8ICLPklqKdvt
rnmBN7Saoj4gfIp+gx2LV5X6eDgopLOe3ZwdoTdC6DMNIohoYzoBMJ26mx71duqa
3MnZQXqECo4IvUSlXor956krCkhu3owp
-----END ENCRYPTED PRIVATE KEY-----

0 comments on commit 2bc5ed5

Please sign in to comment.