jruby-openssl 0.5.2 → 0.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/History.txt +27 -0
- data/Manifest.txt +100 -0
- data/Rakefile +71 -0
- data/lib/jopenssl.jar +0 -0
- data/lib/jopenssl/version.rb +1 -1
- data/lib/openssl/bn.rb +1 -3
- data/lib/openssl/cipher.rb +15 -17
- data/lib/openssl/digest.rb +1 -3
- data/test/cert_with_ec_pk.cer +27 -0
- data/test/fixture/ca_path/72fa7371.0 +19 -0
- data/test/fixture/ca_path/verisign.pem +19 -0
- data/test/fixture/common.pem +48 -0
- data/test/fixture/max.pem +29 -0
- data/test/fixture/purpose/b70a5bc1.0 +24 -0
- data/test/fixture/purpose/ca/PASSWD_OF_CA_KEY_IS_1234 +0 -0
- data/test/fixture/purpose/ca/ca_config.rb +37 -0
- data/test/fixture/purpose/ca/cacert.pem +24 -0
- data/test/fixture/purpose/ca/newcerts/2_cert.pem +19 -0
- data/test/fixture/purpose/ca/newcerts/3_cert.pem +19 -0
- data/test/fixture/purpose/ca/private/cakeypair.pem +30 -0
- data/test/fixture/purpose/ca/serial +1 -0
- data/test/fixture/purpose/cacert.pem +24 -0
- data/test/fixture/purpose/scripts/gen_cert.rb +127 -0
- data/test/fixture/purpose/scripts/gen_csr.rb +50 -0
- data/test/fixture/purpose/scripts/init_ca.rb +66 -0
- data/test/fixture/purpose/sslclient.pem +19 -0
- data/test/fixture/purpose/sslclient/csr.pem +10 -0
- data/test/fixture/purpose/sslclient/keypair.pem +15 -0
- data/test/fixture/purpose/sslclient/sslclient.pem +19 -0
- data/test/fixture/purpose/sslserver.pem +19 -0
- data/test/fixture/purpose/sslserver/csr.pem +10 -0
- data/test/fixture/purpose/sslserver/keypair.pem +15 -0
- data/test/fixture/purpose/sslserver/sslserver.pem +19 -0
- data/test/fixture/verisign.pem +19 -0
- data/test/fixture/verisign_c3.pem +14 -0
- data/test/openssl/test_cipher.rb +22 -0
- data/test/openssl/test_pkcs7.rb +1 -0
- data/test/openssl/test_ssl.rb +2 -0
- data/test/openssl/test_x509ext.rb +21 -0
- data/test/openssl/test_x509name.rb +16 -0
- data/test/test_cipher.rb +20 -6
- data/test/test_integration.rb +43 -4
- data/test/test_parse_certificate.rb +20 -0
- data/test/test_x509store.rb +155 -0
- metadata +37 -3
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDEDCCAfigAwIBAgIBAzANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJKUDEa
|
3
|
+
MBgGA1UECgwRd3d3LnJ1YnktbGFuZy5vcmcxFDASBgNVBAsMC2RldmVsb3BtZW50
|
4
|
+
MQswCQYDVQQDDAJDQTAeFw0wOTExMTkxMDMwMjdaFw0yODExMTQxMDMwMjdaMD0x
|
5
|
+
CzAJBgNVBAYTAkpQMRowGAYDVQQKDBF3d3cucnVieS1sYW5nLm9yZzESMBAGA1UE
|
6
|
+
AwwJc3NsY2xpZW50MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgemBPByEo
|
7
|
+
KbxaYnHXJxslyYsdWWCKf6j2mVIoxzC0b7W4TS5loBzOkZ05rkuapZ7O5flSMjtH
|
8
|
+
5NMJ2h7/zsgK5XBkNRCPFK+8HMXVFdSs+euKY+2qE01P0NIuCrkvKjJgsrXdy3sG
|
9
|
+
2UVUEoYEt5MHDR6aBL0Km+nVKc6T7O+KtQIDAQABo4GPMIGMMAwGA1UdEwEB/wQC
|
10
|
+
MAAwMQYJYIZIAYb4QgENBCQWIlJ1YnkvT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlm
|
11
|
+
aWNhdGUwHQYDVR0OBBYEFOFnq0r6adftxM/7aApl0DDrLTNWMAsGA1UdDwQEAwIF
|
12
|
+
4DAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUHAwQwDQYJKoZIhvcNAQEFBQAD
|
13
|
+
ggEBACiRGC9KvUP2PaU7JmcIzJHMJtz0mUsO8KJeFWmBCSkfQErF3egOzE47WcRM
|
14
|
+
0lGy0e4fjJB3at/O2V4RgwkFpsBpGXv9LJ5ZVXkEu9PwzwLTGZ4VfSPNIXgse1lK
|
15
|
+
9EYOXgL8XhL7c9XPJLRFOWt6Odwp1VjQ2RqkpYLYnsHZam+5gsRd5K2yS0VO8A1Q
|
16
|
+
otxH1D4evwpoSAaRHSff71Qh7046g2jGvCvdEVqBXuAoOuY8IRvf6YpTKEcPuOOo
|
17
|
+
t7h5kLIVKuG4/AikVZ62Xh7DjdRFxy/Pxg3uIhrvkHkG8QtEFgBBMHoQR6iSGf6N
|
18
|
+
1SNrs9tpu1oqTSzoKFG72BsEA6M=
|
19
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDBjCCAe6gAwIBAgIBAjANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJKUDEa
|
3
|
+
MBgGA1UECgwRd3d3LnJ1YnktbGFuZy5vcmcxFDASBgNVBAsMC2RldmVsb3BtZW50
|
4
|
+
MQswCQYDVQQDDAJDQTAeFw0wOTExMTkxMDMwMTdaFw0yODExMTQxMDMwMTdaMD0x
|
5
|
+
CzAJBgNVBAYTAkpQMRowGAYDVQQKDBF3d3cucnVieS1sYW5nLm9yZzESMBAGA1UE
|
6
|
+
AwwJc3Nsc2VydmVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgYsazavfR
|
7
|
+
a72yK4qfnIjOrDT9Uv2ToL4swbE86PXY5N+YvUig3fVmNJo72rT5JlAODs+MtJJU
|
8
|
+
aJ8HsczlGdrhjTWyT/0fyoY/rC4mi5UFASBCbaoaviDPgbhI6ehBY6d5vEYQOW79
|
9
|
+
fL95KIa+OyGzUNYy+EkSxJmvt/8EJYtqIwIDAQABo4GFMIGCMAwGA1UdEwEB/wQC
|
10
|
+
MAAwMQYJYIZIAYb4QgENBCQWIlJ1YnkvT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlm
|
11
|
+
aWNhdGUwHQYDVR0OBBYEFJsUyGU/R4muSKVIeckJElcBNbipMAsGA1UdDwQEAwIF
|
12
|
+
oDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQUFAAOCAQEAAc49qdDC
|
13
|
+
TzFoWy794TYEx/uSAFQPMxp/dktYuMvtMSqhOfkDAaX7YFAD40R9tQljm6Vb7uEB
|
14
|
+
afAecveSyBN2EPZas8NdohJJcTT/pu39E9iMuvAoxz+R8RV7S/RikFOtoet79owa
|
15
|
+
6lnD3893tz5RR5BloRX7yRii87U5LUdxd3CvEmA7ycNTO8ZEaAuLDitsTMxhPiIJ
|
16
|
+
DeGW5L8DCyiWuDt9K6S13XdnDxTvYUmafVPU59BncdSoY/3BebappMzDM8QM0yCZ
|
17
|
+
GWh7ItY4sncMur1fc9ZuSsyplT3d3jysmVXolz2khxboMPVBoRSTtgBOn1PSsVma
|
18
|
+
FWULbrbYBK5Cqg==
|
19
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,10 @@
|
|
1
|
+
-----BEGIN CERTIFICATE REQUEST-----
|
2
|
+
MIIBfDCB5gIBADA9MQswCQYDVQQGEwJKUDEaMBgGA1UECgwRd3d3LnJ1YnktbGFu
|
3
|
+
Zy5vcmcxEjAQBgNVBAMMCXNzbHNlcnZlcjCBnzANBgkqhkiG9w0BAQEFAAOBjQAw
|
4
|
+
gYkCgYEA4GLGs2r30Wu9siuKn5yIzqw0/VL9k6C+LMGxPOj12OTfmL1IoN31ZjSa
|
5
|
+
O9q0+SZQDg7PjLSSVGifB7HM5Rna4Y01sk/9H8qGP6wuJouVBQEgQm2qGr4gz4G4
|
6
|
+
SOnoQWOnebxGEDlu/Xy/eSiGvjshs1DWMvhJEsSZr7f/BCWLaiMCAwEAAaAAMA0G
|
7
|
+
CSqGSIb3DQEBBAUAA4GBAFpQTo9v0rOmfP/m9WSfUMEXsWUl/NP8c7slM4M0wNOX
|
8
|
+
iI/e2XiyywgOSJlmCdvmrMeSmrhHbLZvIsQUj7CR9fZ4pxz0eX/JwclmlhS+StH8
|
9
|
+
C3HHxlLUOZpnLVl4R3PXoDTCHLuSiQod3WNNiqEdzaRn4jrNv8LgzJtgSseikwDA
|
10
|
+
-----END CERTIFICATE REQUEST-----
|
@@ -0,0 +1,15 @@
|
|
1
|
+
-----BEGIN RSA PRIVATE KEY-----
|
2
|
+
MIICXwIBAAKBgQDgYsazavfRa72yK4qfnIjOrDT9Uv2ToL4swbE86PXY5N+YvUig
|
3
|
+
3fVmNJo72rT5JlAODs+MtJJUaJ8HsczlGdrhjTWyT/0fyoY/rC4mi5UFASBCbaoa
|
4
|
+
viDPgbhI6ehBY6d5vEYQOW79fL95KIa+OyGzUNYy+EkSxJmvt/8EJYtqIwIDAQAB
|
5
|
+
AoGBAJy/o/s2YIRldZD/pck2esOVvTayQP5eLjvp2zynqQapbCGxKQlnxMRvPsdN
|
6
|
+
U1sxjn8jjY3HnulkZKPlazMoSqQy+7JIOzgG8UelDk/4OuuJWQZ26P/Qzza0k5we
|
7
|
+
Sisc8/3xkCzv9RoRIm2VvAAuuSHiZwQTHBP0M6yg9R2+sSpxAkEA+RL48KB9tCyx
|
8
|
+
wo8Tn1WKK2GUoGj+pJJ16uq5taUlRKBwvasHNEu96TlrAHNeq+YnFCeLTbvCkU5P
|
9
|
+
2GaauRV8TQJBAOagD5u+duKB3go+YywRHVcFrv+u9ejS9onfhvwhgciVpCrNR5RX
|
10
|
+
YqhJ3K4ciHEs5OQGsDLPY+dtl1b4AP5r+C8CQQCpyLcNQDmwEi9yUpmrqWGwRKpN
|
11
|
+
1oSOpo/e/PZuzg5jg4KWp/kXOvJQAyXffsVwJElLQdGBwZXV+y4Oc5LQy8aZAkEA
|
12
|
+
3dsaSMO3z/wIYqhTdL/eDqncCAECdQAExOswCnodRJ2XeMlTU4Og161+SkwOgXkj
|
13
|
+
k6xPcgGJ5MbLMJGROy8YZwJBAK+wq+c/x/BeqtnOIqQnDpgxH7Ox1VA0bbaGPq++
|
14
|
+
l24EYVsaJpPty7w7M+B7N5XD5GDVDSeG9Xdf/uyCDX7isFc=
|
15
|
+
-----END RSA PRIVATE KEY-----
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDBjCCAe6gAwIBAgIBAjANBgkqhkiG9w0BAQUFADBMMQswCQYDVQQGEwJKUDEa
|
3
|
+
MBgGA1UECgwRd3d3LnJ1YnktbGFuZy5vcmcxFDASBgNVBAsMC2RldmVsb3BtZW50
|
4
|
+
MQswCQYDVQQDDAJDQTAeFw0wOTExMTkxMDMwMTdaFw0yODExMTQxMDMwMTdaMD0x
|
5
|
+
CzAJBgNVBAYTAkpQMRowGAYDVQQKDBF3d3cucnVieS1sYW5nLm9yZzESMBAGA1UE
|
6
|
+
AwwJc3Nsc2VydmVyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDgYsazavfR
|
7
|
+
a72yK4qfnIjOrDT9Uv2ToL4swbE86PXY5N+YvUig3fVmNJo72rT5JlAODs+MtJJU
|
8
|
+
aJ8HsczlGdrhjTWyT/0fyoY/rC4mi5UFASBCbaoaviDPgbhI6ehBY6d5vEYQOW79
|
9
|
+
fL95KIa+OyGzUNYy+EkSxJmvt/8EJYtqIwIDAQABo4GFMIGCMAwGA1UdEwEB/wQC
|
10
|
+
MAAwMQYJYIZIAYb4QgENBCQWIlJ1YnkvT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlm
|
11
|
+
aWNhdGUwHQYDVR0OBBYEFJsUyGU/R4muSKVIeckJElcBNbipMAsGA1UdDwQEAwIF
|
12
|
+
oDATBgNVHSUEDDAKBggrBgEFBQcDATANBgkqhkiG9w0BAQUFAAOCAQEAAc49qdDC
|
13
|
+
TzFoWy794TYEx/uSAFQPMxp/dktYuMvtMSqhOfkDAaX7YFAD40R9tQljm6Vb7uEB
|
14
|
+
afAecveSyBN2EPZas8NdohJJcTT/pu39E9iMuvAoxz+R8RV7S/RikFOtoet79owa
|
15
|
+
6lnD3893tz5RR5BloRX7yRii87U5LUdxd3CvEmA7ycNTO8ZEaAuLDitsTMxhPiIJ
|
16
|
+
DeGW5L8DCyiWuDt9K6S13XdnDxTvYUmafVPU59BncdSoY/3BebappMzDM8QM0yCZ
|
17
|
+
GWh7ItY4sncMur1fc9ZuSsyplT3d3jysmVXolz2khxboMPVBoRSTtgBOn1PSsVma
|
18
|
+
FWULbrbYBK5Cqg==
|
19
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,19 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
|
3
|
+
BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
|
4
|
+
c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
|
5
|
+
MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
|
6
|
+
emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
|
7
|
+
DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
|
8
|
+
FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
|
9
|
+
UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
|
10
|
+
YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
|
11
|
+
MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
|
12
|
+
AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
|
13
|
+
pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
|
14
|
+
13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
|
15
|
+
AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
|
16
|
+
U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
|
17
|
+
F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
|
18
|
+
oJ2daZH9
|
19
|
+
-----END CERTIFICATE-----
|
@@ -0,0 +1,14 @@
|
|
1
|
+
-----BEGIN CERTIFICATE-----
|
2
|
+
MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
|
3
|
+
A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
|
4
|
+
cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
|
5
|
+
MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
|
6
|
+
BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
|
7
|
+
YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
|
8
|
+
ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
|
9
|
+
BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
|
10
|
+
I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
|
11
|
+
CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
|
12
|
+
lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
|
13
|
+
AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
|
14
|
+
-----END CERTIFICATE-----
|
data/test/openssl/test_cipher.rb
CHANGED
@@ -169,6 +169,28 @@ class OpenSSL::TestCipher < Test::Unit::TestCase
|
|
169
169
|
}
|
170
170
|
end
|
171
171
|
end
|
172
|
+
|
173
|
+
# JRUBY-4028
|
174
|
+
def test_jruby_4028
|
175
|
+
key = "0599E113A7EE32A9"
|
176
|
+
data = "1234567890~5J96LC303C1D22DD~20090930005944~http%3A%2F%2Flocalhost%3A8080%2Flogin%3B0%3B1~http%3A%2F%2Fmix-stage.oracle.com%2F~00"
|
177
|
+
c1 = OpenSSL::Cipher::Cipher.new("DES-CBC")
|
178
|
+
c1.padding = 0
|
179
|
+
c1.encrypt
|
180
|
+
c1.key = key
|
181
|
+
e = c1.update data
|
182
|
+
e << c1.final
|
183
|
+
|
184
|
+
c2 = OpenSSL::Cipher::Cipher.new("DES-CBC")
|
185
|
+
c2.padding = 0
|
186
|
+
c2.decrypt
|
187
|
+
c2.key = key
|
188
|
+
d = c2.update e
|
189
|
+
d << c2.final
|
190
|
+
|
191
|
+
assert_equal "]s\345F\251\250\223uO\315\220\255g\031\363c\006\205L\260G7\016`\265\377K5?\375\310\025\026\"\a\246N\270\234]\206\n\r\351\262\257\305\3632p_\205\257\026\226~-7\av#BZx\024\246'\f\216\005\201\r\372\201\316%W\250\210^\340{\371\245\374<~/YnV\277\311\230\250{\336\302W\353\032\321+\200pA\037\274\262\022*u\344\363\304\e\214J\353!\2352\267)s\360c\a", e
|
192
|
+
assert_equal data, d
|
193
|
+
end
|
172
194
|
end
|
173
195
|
|
174
196
|
end
|
data/test/openssl/test_pkcs7.rb
CHANGED
@@ -33,6 +33,7 @@ class OpenSSL::TestPKCS7 < Test::Unit::TestCase
|
|
33
33
|
["keyUsage","Non Repudiation, Digital Signature, Key Encipherment",true],
|
34
34
|
["authorityKeyIdentifier","keyid:always",false],
|
35
35
|
["extendedKeyUsage","clientAuth, emailProtection, codeSigning",false],
|
36
|
+
["nsCertType","client,email",false],
|
36
37
|
]
|
37
38
|
@ee1_cert = issue_cert(ee1, @rsa1024, 2, Time.now, Time.now+1800, ee_exts,
|
38
39
|
@ca_cert, @rsa2048, OpenSSL::Digest::SHA1.new)
|
data/test/openssl/test_ssl.rb
CHANGED
@@ -69,6 +69,27 @@ class OpenSSL::TestX509Extension < Test::Unit::TestCase
|
|
69
69
|
%r{URI:ldap://ldap.example.com/cn=ca\?certificateRevocationList;binary},
|
70
70
|
cdp.value)
|
71
71
|
end
|
72
|
+
|
73
|
+
# JRUBY-3888
|
74
|
+
# Problems with subjectKeyIdentifier with non 20-bytes sha1 digested keys
|
75
|
+
def test_certificate_with_rare_extension
|
76
|
+
cert_file = File.join(File.dirname(__FILE__), "..", "fixture", "max.pem")
|
77
|
+
cer = OpenSSL::X509::Certificate.new(File.read(cert_file))
|
78
|
+
exts = Hash.new
|
79
|
+
cer.extensions.each{|ext| exts[ext.oid] = ext.value}
|
80
|
+
|
81
|
+
assert exts["subjectKeyIdentifier"] == "4C:B9:E1:DC:7A:AC:35:CF"
|
82
|
+
end
|
83
|
+
|
84
|
+
def test_extension_from_20_byte_sha1_digests
|
85
|
+
cert_file = File.join(File.dirname(__FILE__), "..", "fixture", "common.pem")
|
86
|
+
cer = OpenSSL::X509::Certificate.new(File.read(cert_file))
|
87
|
+
exts = Hash.new
|
88
|
+
cer.extensions.each{|ext| exts[ext.oid] = ext.value}
|
89
|
+
|
90
|
+
assert exts["subjectKeyIdentifier"] == "B4:AC:83:5D:21:FB:D6:8A:56:7E:B2:49:6D:69:BB:E4:6F:D8:5A:AC"
|
91
|
+
end
|
92
|
+
|
72
93
|
end
|
73
94
|
|
74
95
|
end
|
@@ -6,6 +6,8 @@ require "test/unit"
|
|
6
6
|
|
7
7
|
if defined?(OpenSSL)
|
8
8
|
|
9
|
+
require 'digest/md5'
|
10
|
+
|
9
11
|
class OpenSSL::TestX509Name < Test::Unit::TestCase
|
10
12
|
OpenSSL::ASN1::ObjectId.register(
|
11
13
|
"1.2.840.113549.1.9.1", "emailAddress", "emailAddress")
|
@@ -260,6 +262,20 @@ class OpenSSL::TestX509Name < Test::Unit::TestCase
|
|
260
262
|
assert_equal(OpenSSL::ASN1::IA5STRING, ary[3][2])
|
261
263
|
assert_equal(OpenSSL::ASN1::PRINTABLESTRING, ary[4][2])
|
262
264
|
end
|
265
|
+
|
266
|
+
def test_hash
|
267
|
+
dn = "/DC=org/DC=ruby-lang/CN=www.ruby-lang.org"
|
268
|
+
name = OpenSSL::X509::Name.parse(dn)
|
269
|
+
d = Digest::MD5.digest(name.to_der)
|
270
|
+
expected = (d[0] & 0xff) | (d[1] & 0xff) << 8 | (d[2] & 0xff) << 16 | (d[3] & 0xff) << 24
|
271
|
+
assert_equal(expected, name.hash)
|
272
|
+
#
|
273
|
+
dn = "/DC=org/DC=ruby-lang/CN=baz.ruby-lang.org"
|
274
|
+
name = OpenSSL::X509::Name.parse(dn)
|
275
|
+
d = Digest::MD5.digest(name.to_der)
|
276
|
+
expected = (d[0] & 0xff) | (d[1] & 0xff) << 8 | (d[2] & 0xff) << 16 | (d[3] & 0xff) << 24
|
277
|
+
assert_equal(expected, name.hash)
|
278
|
+
end
|
263
279
|
end
|
264
280
|
|
265
281
|
end
|
data/test/test_cipher.rb
CHANGED
@@ -13,6 +13,13 @@ end
|
|
13
13
|
require "test/unit"
|
14
14
|
|
15
15
|
class TestCipher < Test::Unit::TestCase
|
16
|
+
def test_keylen
|
17
|
+
cipher = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC')
|
18
|
+
# must be 24 but it returns 16 on JRE6 without unlimited jurisdiction
|
19
|
+
# policy. it returns 24 on JRE6 with the unlimited policy.
|
20
|
+
assert_equal(24, cipher.key_len)
|
21
|
+
end
|
22
|
+
|
16
23
|
def test_encrypt_takes_parameter
|
17
24
|
enc = OpenSSL::Cipher::Cipher.new('DES-EDE3-CBC')
|
18
25
|
enc.encrypt("123")
|
@@ -43,6 +50,15 @@ class TestCipher < Test::Unit::TestCase
|
|
43
50
|
)
|
44
51
|
end
|
45
52
|
|
53
|
+
def test_rc2
|
54
|
+
do_repeated_test(
|
55
|
+
"RC2",
|
56
|
+
"foobarbazboofarf",
|
57
|
+
"\x18imZ\x9Ed\x15\xF3\xD6\xE6M\xCDf\xAA\xD3\xFE",
|
58
|
+
"\xEF\xF7\x16\x06\x93)-##\xB2~\xAD,\xAD\x82\xF5"
|
59
|
+
)
|
60
|
+
end
|
61
|
+
|
46
62
|
private
|
47
63
|
def do_repeated_test(algo, string, enc1, enc2)
|
48
64
|
do_repeated_encrypt_test(algo, string, enc1, enc2)
|
@@ -58,10 +74,9 @@ class TestCipher < Test::Unit::TestCase
|
|
58
74
|
cipher.key = KEY_TEMPLATE[0, cipher.key_len]
|
59
75
|
|
60
76
|
assert_equal result1, cipher.update(string)
|
61
|
-
cipher.final
|
77
|
+
assert_equal "", cipher.final
|
62
78
|
|
63
|
-
assert_equal result2, cipher.update(string)
|
64
|
-
cipher.final
|
79
|
+
assert_equal result2, cipher.update(string) + cipher.final
|
65
80
|
end
|
66
81
|
|
67
82
|
def do_repeated_decrypt_test(algo, result, string1, string2)
|
@@ -73,9 +88,8 @@ class TestCipher < Test::Unit::TestCase
|
|
73
88
|
cipher.key = KEY_TEMPLATE[0, cipher.key_len]
|
74
89
|
|
75
90
|
assert_equal result, cipher.update(string1)
|
76
|
-
cipher.final
|
91
|
+
assert_equal "", cipher.final
|
77
92
|
|
78
|
-
assert_equal result, cipher.update(string2)
|
79
|
-
cipher.final
|
93
|
+
assert_equal result, cipher.update(string2) + cipher.final
|
80
94
|
end
|
81
95
|
end
|
data/test/test_integration.rb
CHANGED
@@ -29,18 +29,57 @@ class TestIntegration < Test::Unit::TestCase
|
|
29
29
|
# Warning - this test actually uses the internet connection.
|
30
30
|
# If there is no connection, it will fail.
|
31
31
|
def test_ca_path_name
|
32
|
-
uri = URI.parse('https://www.
|
33
|
-
|
32
|
+
uri = URI.parse('https://www.amazon.com')
|
34
33
|
http = Net::HTTP.new(uri.host, uri.port)
|
35
34
|
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
36
|
-
http.ca_path = "
|
35
|
+
http.ca_path = "test/fixture/ca_path/"
|
37
36
|
http.use_ssl = true
|
37
|
+
response = http.start do |s|
|
38
|
+
assert s.get(uri.request_uri).length > 0
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
# Warning - this test actually uses the internet connection.
|
43
|
+
# If there is no connection, it will fail.
|
44
|
+
def test_ssl_verify
|
45
|
+
uri = URI.parse('https://www.amazon.com/')
|
46
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
47
|
+
http.use_ssl = true
|
48
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
49
|
+
# right trust anchor for www.amazon.com
|
50
|
+
http.ca_file = 'test/fixture/verisign.pem'
|
51
|
+
response = http.start do |s|
|
52
|
+
assert s.get(uri.request_uri).length > 0
|
53
|
+
end
|
54
|
+
# wrong trust anchor for www.amazon.com
|
55
|
+
http.ca_file = 'test/fixture/verisign_c3.pem'
|
56
|
+
assert_raises(OpenSSL::SSL::SSLError) do
|
57
|
+
# it must cause SSLError for verification failure.
|
58
|
+
response = http.start do |s|
|
59
|
+
s.get(uri.request_uri)
|
60
|
+
end
|
61
|
+
end
|
62
|
+
# round trip
|
63
|
+
http.ca_file = 'test/fixture/verisign.pem'
|
64
|
+
response = http.start do |s|
|
65
|
+
assert s.get(uri.request_uri).length > 0
|
66
|
+
end
|
67
|
+
end
|
38
68
|
|
69
|
+
# Warning - this test actually uses the internet connection.
|
70
|
+
# If there is no connection, it will fail.
|
71
|
+
def test_pathlen_does_not_appear
|
72
|
+
uri = URI.parse('https://www.paypal.com/')
|
73
|
+
http = Net::HTTP.new(uri.host, uri.port)
|
74
|
+
http.use_ssl = true
|
75
|
+
http.verify_mode = OpenSSL::SSL::VERIFY_PEER
|
76
|
+
# right trust anchor for www.amazon.com
|
77
|
+
http.ca_file = 'test/fixture/verisign_c3.pem'
|
39
78
|
response = http.start do |s|
|
40
79
|
assert s.get(uri.request_uri).length > 0
|
41
80
|
end
|
42
81
|
end
|
43
|
-
|
82
|
+
|
44
83
|
# JRUBY-2178 and JRUBY-1307
|
45
84
|
# Warning - this test actually uses the internet connection.
|
46
85
|
# If there is no connection, it will fail.
|
@@ -0,0 +1,20 @@
|
|
1
|
+
require 'openssl'
|
2
|
+
require "test/unit"
|
3
|
+
|
4
|
+
class TestParseCertificate < Test::Unit::TestCase
|
5
|
+
CERT = File.dirname(__FILE__) + '/cert_with_ec_pk.cer'
|
6
|
+
|
7
|
+
def test_certificate_parse_works_with_ec_pk_cert
|
8
|
+
cer = OpenSSL::X509::Certificate.new(File.read(CERT))
|
9
|
+
assert cer.to_s != nil
|
10
|
+
assert cer.issuer.to_s != nil
|
11
|
+
assert cer.subject.to_s != nil
|
12
|
+
assert cer.extensions.to_s != nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_certificate_with_ec_pk_cert_fails_requesting_pk
|
16
|
+
cer = OpenSSL::X509::Certificate.new(File.read(CERT))
|
17
|
+
assert_raises(OpenSSL::X509::CertificateError) { cer.public_key }
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
@@ -0,0 +1,155 @@
|
|
1
|
+
if defined?(JRUBY_VERSION)
|
2
|
+
require "java"
|
3
|
+
base = File.dirname(__FILE__)
|
4
|
+
$CLASSPATH << File.join(base, '..', 'pkg', 'classes')
|
5
|
+
$CLASSPATH << File.join(base, '..', 'lib', 'bcprov-jdk14-139.jar')
|
6
|
+
end
|
7
|
+
|
8
|
+
begin
|
9
|
+
require "openssl"
|
10
|
+
rescue LoadError
|
11
|
+
end
|
12
|
+
|
13
|
+
require "test/unit"
|
14
|
+
require "tempfile"
|
15
|
+
|
16
|
+
class TestX509Store < Test::Unit::TestCase
|
17
|
+
def setup
|
18
|
+
@store = OpenSSL::X509::Store.new
|
19
|
+
end
|
20
|
+
|
21
|
+
def teardown
|
22
|
+
end
|
23
|
+
|
24
|
+
def test_ns_cert_type
|
25
|
+
f = Tempfile.new("globalsign-root.pem")
|
26
|
+
f << GLOBALSIGN_ROOT_CA
|
27
|
+
f.close
|
28
|
+
@store.add_file(f.path)
|
29
|
+
f.unlink
|
30
|
+
|
31
|
+
# CAUTION !
|
32
|
+
#
|
33
|
+
# sgc is an issuing CA certificate so we should not verify it for the
|
34
|
+
# purpose 'PURPOSE_SSL_SERVER'. It's not a SSL server certificate.
|
35
|
+
# We're just checking the code for 'PURPOSE_SSL_SERVER'.
|
36
|
+
# jruby-openssl/0.5.2 raises the following exception around ASN.1
|
37
|
+
# nsCertType handling.
|
38
|
+
# Purpose.java:344:in `call': java.lang.ClassCastException: org.bouncycastle.asn1.DEROctetString cannot be cast to org.bouncycastle.asn1.DERBitString
|
39
|
+
sgc = OpenSSL::X509::Certificate.new(GLOBALSIGN_ORGANIZATION_VALIDATION_CA)
|
40
|
+
|
41
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
42
|
+
assert_nothing_raised do
|
43
|
+
@store.verify(sgc) # => should be false
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def test_purpose_ssl_client
|
48
|
+
@store.add_file("test/fixture/purpose/cacert.pem")
|
49
|
+
cert = OpenSSL::X509::Certificate.new(File.read("test/fixture/purpose/sslclient.pem"))
|
50
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
|
51
|
+
assert_equal(true, @store.verify(cert))
|
52
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
53
|
+
assert_equal(false, @store.verify(cert))
|
54
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
|
55
|
+
assert_equal(true, @store.verify(cert))
|
56
|
+
end
|
57
|
+
|
58
|
+
def test_purpose_ssl_server
|
59
|
+
@store.add_file("test/fixture/purpose/cacert.pem")
|
60
|
+
cert = OpenSSL::X509::Certificate.new(File.read("test/fixture/purpose/sslserver.pem"))
|
61
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
62
|
+
assert_equal(true, @store.verify(cert))
|
63
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
|
64
|
+
assert_equal(false, @store.verify(cert))
|
65
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
66
|
+
assert_equal(true, @store.verify(cert))
|
67
|
+
end
|
68
|
+
|
69
|
+
def test_add_file_multiple
|
70
|
+
f = Tempfile.new("globalsign-root.pem")
|
71
|
+
f << GLOBALSIGN_ROOT_CA
|
72
|
+
f << "junk junk\n"
|
73
|
+
f << "junk junk\n"
|
74
|
+
f << "junk junk\n"
|
75
|
+
f << File.read("test/fixture/purpose/cacert.pem")
|
76
|
+
f.close
|
77
|
+
@store.add_file(f.path)
|
78
|
+
f.unlink
|
79
|
+
|
80
|
+
cert = OpenSSL::X509::Certificate.new(File.read("test/fixture/purpose/sslserver.pem"))
|
81
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
82
|
+
assert_equal(true, @store.verify(cert))
|
83
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_CLIENT
|
84
|
+
assert_equal(false, @store.verify(cert))
|
85
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
86
|
+
assert_equal(true, @store.verify(cert))
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_set_default_paths
|
90
|
+
@store.purpose = OpenSSL::X509::PURPOSE_SSL_SERVER
|
91
|
+
cert = OpenSSL::X509::Certificate.new(File.read("test/fixture/purpose/sslserver.pem"))
|
92
|
+
assert_equal(false, @store.verify(cert))
|
93
|
+
begin
|
94
|
+
backup = ENV['SSL_CERT_DIR']
|
95
|
+
ENV['SSL_CERT_DIR'] = 'test/fixture/purpose/'
|
96
|
+
@store.set_default_paths
|
97
|
+
assert_equal(true, @store.verify(cert))
|
98
|
+
ensure
|
99
|
+
ENV['SSL_CERT_DIR'] = backup if backup
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
103
|
+
GLOBALSIGN_ROOT_CA = <<__EOS__
|
104
|
+
-----BEGIN CERTIFICATE-----
|
105
|
+
MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
106
|
+
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
107
|
+
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
|
108
|
+
MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
|
109
|
+
YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
|
110
|
+
aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
|
111
|
+
jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
|
112
|
+
xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
|
113
|
+
1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
|
114
|
+
snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
|
115
|
+
U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
|
116
|
+
9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
|
117
|
+
BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
|
118
|
+
AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
|
119
|
+
yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
|
120
|
+
38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
|
121
|
+
AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
|
122
|
+
DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
|
123
|
+
HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
|
124
|
+
-----END CERTIFICATE-----
|
125
|
+
__EOS__
|
126
|
+
|
127
|
+
GLOBALSIGN_ORGANIZATION_VALIDATION_CA = <<__EOS__
|
128
|
+
-----BEGIN CERTIFICATE-----
|
129
|
+
MIIEZzCCA0+gAwIBAgILBAAAAAABHkSl9SowDQYJKoZIhvcNAQEFBQAwVzELMAkG
|
130
|
+
A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
|
131
|
+
b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw0wNzA0MTExMjAw
|
132
|
+
MDBaFw0xNzA0MTExMjAwMDBaMGoxIzAhBgNVBAsTGk9yZ2FuaXphdGlvbiBWYWxp
|
133
|
+
ZGF0aW9uIENBMRMwEQYDVQQKEwpHbG9iYWxTaWduMS4wLAYDVQQDEyVHbG9iYWxT
|
134
|
+
aWduIE9yZ2FuaXphdGlvbiBWYWxpZGF0aW9uIENBMIIBIjANBgkqhkiG9w0BAQEF
|
135
|
+
AAOCAQ8AMIIBCgKCAQEAoS/EvM6HA+lnwYnI5ZP8fbStnvZjTmronCxziaIB9I8h
|
136
|
+
+P0lnVgWbYb27klXdX516iIRfj37x0JB3PzFDJFVgHvrZDMdm/nKOOmrxiVDUSVA
|
137
|
+
9OR+GFVqqY8QOkAe1leD738vNC8t0vZTwhkNt+3JgfVGLLQjQl6dEwN17Opq/Fd8
|
138
|
+
yTaXO5jcExPs7EH6XTTquZPnEBZlzJyS/fXFnT5KuQn85F8eaV9N9FZyRLEdIwPI
|
139
|
+
NvZliMi/ORZFjh4mbFEWxSoAOMWkE2mVfasBO6jEFLSA2qwaRCDV/qkGexQnr+Aw
|
140
|
+
Id2Q9KnVIxkuHgPmwd+VKeTBlEPdPpCqy0vJvorTOQIDAQABo4IBHzCCARswDgYD
|
141
|
+
VR0PAQH/BAQDAgEGMBIGA1UdEwEB/wQIMAYBAf8CAQAwHQYDVR0OBBYEFH1tKuxm
|
142
|
+
q6dRNqsCafFwj8RZC5ofMEsGA1UdIAREMEIwQAYJKwYBBAGgMgEUMDMwMQYIKwYB
|
143
|
+
BQUHAgEWJWh0dHA6Ly93d3cuZ2xvYmFsc2lnbi5uZXQvcmVwb3NpdG9yeS8wMwYD
|
144
|
+
VR0fBCwwKjAooCagJIYiaHR0cDovL2NybC5nbG9iYWxzaWduLm5ldC9yb290LmNy
|
145
|
+
bDARBglghkgBhvhCAQEEBAMCAgQwIAYDVR0lBBkwFwYKKwYBBAGCNwoDAwYJYIZI
|
146
|
+
AYb4QgQBMB8GA1UdIwQYMBaAFGB7ZhpFDZfKiVAvfQTNNKj//P1LMA0GCSqGSIb3
|
147
|
+
DQEBBQUAA4IBAQB5R/wV10x53w96ns7UfEtjyYm1ez+ZEuicjJpJL+BOlUrtx7y+
|
148
|
+
8aLbjpMdunFUqkvZiSIkh8UEqKyCUqBS+LjhT6EnZmMhSjnnx8VOX7LWHRNtMOnO
|
149
|
+
16IcvCkKczxbI0n+1v/KsE/18meYwEcR+LdIppAJ1kK+6rG5U0LDnCDJ+6FbtVZt
|
150
|
+
h4HIYKzEuXInCo4eqLEuzTKieFewnPiVu0OOjDGGblMNxhIFukFuqDUwCRgdAmH/
|
151
|
+
/e413mrDO9BNS05QslY2DERd2hplKuaYVqljMy4E567o9I63stp9wMjirqYoL+PJ
|
152
|
+
c738B0E0t6pu7qfb0ZM87ZDsMpKI2cgjbHQh
|
153
|
+
-----END CERTIFICATE-----
|
154
|
+
__EOS__
|
155
|
+
end
|