jruby-openssl 0.5.2 → 0.6
Sign up to get free protection for your applications and to get access to all the features.
- 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
|