Skip to content

Commit a3d2045

Browse files
authored
Merge pull request #686 from johnnyshields/use-sha256-by-default
v2.0: Use SHA-256 by default
2 parents ed0d85c + b494941 commit a3d2045

16 files changed

+134
-114
lines changed

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* [#685](https://github.com/SAML-Toolkits/ruby-saml/pull/685) Create namespace alias `OneLogin = Object` for backward compatibility, to be removed in version `2.1.0`.
66
* [#685](https://github.com/SAML-Toolkits/ruby-saml/pull/685) Change directly structure from `lib/onelogin/ruby-saml` to `lib/ruby_saml`.
77
* [#685](https://github.com/SAML-Toolkits/ruby-saml/pull/685) Move schema files from `lib/onelogin/schemas` to `lib/ruby_saml/schemas`.
8+
* [#686](https://github.com/SAML-Toolkits/ruby-saml/pull/686) Use SHA-256 as the default hashing algorithm everywhere instead of SHA-1, including signatures, fingerprints, and digests.
89

910
### 1.17.0
1011
* [#673](https://github.com/SAML-Toolkits/ruby-saml/pull/673) Add `Settings#sp_cert_multi` paramter to facilitate SP certificate and key rotation.

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -200,7 +200,7 @@ def saml_settings
200200
settings.idp_slo_service_url = "https://app.onelogin.com/trust/saml2/http-redirect/slo/#{OneLoginAppId}"
201201
settings.idp_slo_service_binding = "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect" # or :post, :redirect
202202
settings.idp_cert_fingerprint = OneLoginAppCertFingerPrint
203-
settings.idp_cert_fingerprint_algorithm = "http://www.w3.org/2000/09/xmldsig#sha1"
203+
settings.idp_cert_fingerprint_algorithm = "http://www.w3.org/2000/09/xmldsig#sha256"
204204
settings.name_identifier_format = "urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress"
205205
206206
# Optional for most SAML IdPs

UPGRADING.md

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
## Updating from 1.17.x to 2.0.0
44

5-
### Before Upgrading
5+
### Before upgrading
66

77
Before attempting to upgrade to `2.0.0`:
88
- Upgrade your project to minimum Ruby 3.0, JRuby 9.4, or TruffleRuby 22.
99
- Upgrade RubySaml to `1.17.x`. Note that RubySaml `1.17.x` is compatible with up to Ruby 3.3.
1010

11-
### Root Namespace Changed to RubySaml
11+
### Root namespace changed to RubySaml
1212

1313
RubySaml version `2.0.0` changes the root namespace from `OneLogin::RubySaml::` to just `RubySaml::`. This will require you
1414
to search your codebase for the string `OneLogin::` and remove it as appropriate. Aside from this namespace change,
@@ -17,6 +17,24 @@ the class names themselves have intentionally been kept the same.
1717
For backward compatibility, the alias `OneLogin = Object` has been set, so `OneLogin::RubySaml::` will still work.
1818
This alias will be removed in RubySaml version `2.1.0`.
1919

20+
### Security: Change default hashing algorithm to SHA-256 (was SHA-1)
21+
22+
For security reasons, RubySaml version `2.0.0` uses SHA-256 as its default hashing algorithm everywhere
23+
instead of the now-obsolete SHA-1. This affects:
24+
- The default signature and digest algorithms used when generating SP metadata.
25+
- The default signature algorithm used when generating SP messages such as AuthnRequests.
26+
- The default fingerprint of IdP metadata (`:idp_cert_fingerprint` as generated by `RubySaml::IdpMetadataParser`)
27+
28+
To preserve the old insecure SHA-1 behavior *(not recommended)*, you may set `RubySaml::Settings` as follows:
29+
30+
```ruby
31+
# Preserve RubySaml 1.x insecure SHA-1 behavior
32+
settings = RubySaml::Settings.new
33+
settings.idp_cert_fingerprint_algorithm = XMLSecurity::Document::SHA1
34+
settings.security[:digest_method] = XMLSecurity::Document::SHA1
35+
settings.security[:signature_method] = XMLSecurity::Document::RSA_SHA1
36+
```
37+
2038
## Updating from 1.12.x to 1.13.0
2139

2240
Version `1.13.0` adds `settings.idp_sso_service_binding` and `settings.idp_slo_service_binding`, and

lib/ruby_saml/idp_metadata_parser.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ def certificates
376376

377377
# @return [String|nil] the fingerpint of the X509Certificate if it exists
378378
#
379-
def fingerprint(certificate, fingerprint_algorithm = XMLSecurity::Document::SHA1)
379+
def fingerprint(certificate, fingerprint_algorithm = XMLSecurity::Document::SHA256)
380380
@fingerprint ||= begin
381381
return unless certificate
382382

lib/ruby_saml/settings.rb

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -277,7 +277,7 @@ def get_binding(value)
277277
DEFAULTS = {
278278
assertion_consumer_service_binding: Utils::BINDINGS[:post],
279279
single_logout_service_binding: Utils::BINDINGS[:redirect],
280-
idp_cert_fingerprint_algorithm: XMLSecurity::Document::SHA1,
280+
idp_cert_fingerprint_algorithm: XMLSecurity::Document::SHA256,
281281
compress_request: true,
282282
compress_response: true,
283283
message_max_bytesize: 250_000,
@@ -292,8 +292,8 @@ def get_binding(value)
292292
want_name_id: false,
293293
metadata_signed: false,
294294
embed_sign: false, # Deprecated
295-
digest_method: XMLSecurity::Document::SHA1,
296-
signature_method: XMLSecurity::Document::RSA_SHA1,
295+
digest_method: XMLSecurity::Document::SHA256,
296+
signature_method: XMLSecurity::Document::RSA_SHA256,
297297
check_idp_cert_expiration: false,
298298
check_sp_cert_expiration: false,
299299
strict_audience_validation: false,

lib/xml_security.rb

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,11 +71,11 @@ def algorithm(element)
7171
algorithm = algorithm && algorithm =~ /(rsa-)?sha(.*?)$/i && ::Regexp.last_match(2).to_i
7272

7373
case algorithm
74-
when 256 then OpenSSL::Digest::SHA256
74+
when 1 then OpenSSL::Digest::SHA1
7575
when 384 then OpenSSL::Digest::SHA384
7676
when 512 then OpenSSL::Digest::SHA512
7777
else
78-
OpenSSL::Digest::SHA1
78+
OpenSSL::Digest::SHA256
7979
end
8080
end
8181

@@ -114,7 +114,7 @@ def uuid
114114
# <KeyInfo />
115115
# <Object />
116116
# </Signature>
117-
def sign_document(private_key, certificate, signature_method = RSA_SHA1, digest_method = SHA1)
117+
def sign_document(private_key, certificate, signature_method = RSA_SHA256, digest_method = SHA256)
118118
noko = Nokogiri::XML(to_s) do |config|
119119
config.options = XMLSecurity::BaseDocument::NOKOGIRI_OPTIONS
120120
end
@@ -216,7 +216,7 @@ def validate_document(idp_cert_fingerprint, soft = true, options = {})
216216
if options[:fingerprint_alg]
217217
fingerprint_alg = XMLSecurity::BaseDocument.new.algorithm(options[:fingerprint_alg]).new
218218
else
219-
fingerprint_alg = OpenSSL::Digest.new('SHA1')
219+
fingerprint_alg = OpenSSL::Digest.new('SHA256')
220220
end
221221
fingerprint = fingerprint_alg.hexdigest(cert.to_der)
222222

test/idp_metadata_parser_test.rb

Lines changed: 19 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ def initialize; end
2626
assert_equal "https://hello.example.com/access/saml/idp.xml", settings.idp_entity_id
2727
assert_equal "https://hello.example.com/access/saml/login", settings.idp_sso_service_url
2828
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", settings.idp_sso_service_binding
29-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
29+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
3030
assert_equal "https://hello.example.com/access/saml/logout", settings.idp_slo_service_url
3131
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", settings.idp_slo_service_binding
3232
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", settings.name_identifier_format
@@ -38,15 +38,15 @@ def initialize; end
3838
idp_metadata_parser = RubySaml::IdpMetadataParser.new
3939
idp_metadata = idp_metadata_descriptor
4040
settings = idp_metadata_parser.parse(idp_metadata)
41-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
41+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
4242
end
4343

4444
it "extract certificate from md:KeyDescriptor[@use='encryption']" do
4545
idp_metadata_parser = RubySaml::IdpMetadataParser.new
4646
idp_metadata = idp_metadata_descriptor
4747
idp_metadata = idp_metadata.sub(/<md:KeyDescriptor use="signing">(.*?)<\/md:KeyDescriptor>/m, "")
4848
settings = idp_metadata_parser.parse(idp_metadata)
49-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
49+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
5050
end
5151

5252
it "extract certificate from md:KeyDescriptor" do
@@ -55,7 +55,7 @@ def initialize; end
5555
idp_metadata = idp_metadata.sub(/<md:KeyDescriptor use="signing">(.*?)<\/md:KeyDescriptor>/m, "")
5656
idp_metadata = idp_metadata.sub('<md:KeyDescriptor use="encryption">', '<md:KeyDescriptor>')
5757
settings = idp_metadata_parser.parse(idp_metadata)
58-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
58+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
5959
end
6060

6161
it "extract SSO endpoint with no specific binding, it takes the first" do
@@ -162,7 +162,7 @@ def initialize; end
162162
}
163163
}
164164
})
165-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
165+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
166166
assert_equal XMLSecurity::Document::SHA256, settings.security[:digest_method]
167167
assert_equal XMLSecurity::Document::RSA_SHA256, settings.security[:signature_method]
168168
end
@@ -175,7 +175,7 @@ def initialize; end
175175

176176
RubySaml::IdpMetadataParser.new.parse(idp_metadata_descriptor, :settings => settings)
177177

178-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
178+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
179179
assert_equal XMLSecurity::Document::SHA256, settings.security[:digest_method]
180180
assert_equal XMLSecurity::Document::RSA_SHA256, settings.security[:signature_method]
181181
end
@@ -190,7 +190,7 @@ def initialize; end
190190
assert_equal "https://hello.example.com/access/saml/idp.xml", metadata[:idp_entity_id]
191191
assert_equal "https://hello.example.com/access/saml/login", metadata[:idp_sso_service_url]
192192
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", metadata[:idp_sso_service_binding]
193-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", metadata[:idp_cert_fingerprint]
193+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", metadata[:idp_cert_fingerprint]
194194
assert_equal "https://hello.example.com/access/saml/logout", metadata[:idp_slo_service_url]
195195
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", metadata[:idp_slo_service_binding]
196196
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", metadata[:name_identifier_format]
@@ -202,15 +202,15 @@ def initialize; end
202202
idp_metadata_parser = RubySaml::IdpMetadataParser.new
203203
idp_metadata = idp_metadata_descriptor
204204
metadata = idp_metadata_parser.parse_to_hash(idp_metadata)
205-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", metadata[:idp_cert_fingerprint]
205+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", metadata[:idp_cert_fingerprint]
206206
end
207207

208208
it "extract certificate from md:KeyDescriptor[@use='encryption']" do
209209
idp_metadata_parser = RubySaml::IdpMetadataParser.new
210210
idp_metadata = idp_metadata_descriptor
211211
idp_metadata = idp_metadata.sub(/<md:KeyDescriptor use="signing">(.*?)<\/md:KeyDescriptor>/m, "")
212212
parsed_metadata = idp_metadata_parser.parse_to_hash(idp_metadata)
213-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", parsed_metadata[:idp_cert_fingerprint]
213+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", parsed_metadata[:idp_cert_fingerprint]
214214
end
215215

216216
it "extract certificate from md:KeyDescriptor" do
@@ -219,7 +219,7 @@ def initialize; end
219219
idp_metadata = idp_metadata.sub(/<md:KeyDescriptor use="signing">(.*?)<\/md:KeyDescriptor>/m, "")
220220
idp_metadata = idp_metadata.sub('<md:KeyDescriptor use="encryption">', '<md:KeyDescriptor>')
221221
parsed_metadata = idp_metadata_parser.parse_to_hash(idp_metadata)
222-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", parsed_metadata[:idp_cert_fingerprint]
222+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", parsed_metadata[:idp_cert_fingerprint]
223223
end
224224

225225
it "extract SSO endpoint with no specific binding, it takes the first" do
@@ -261,7 +261,7 @@ def initialize; end
261261
}
262262
}
263263
})
264-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", parsed_metadata[:idp_cert_fingerprint]
264+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", parsed_metadata[:idp_cert_fingerprint]
265265
assert_nil parsed_metadata[:security]
266266
end
267267

@@ -272,8 +272,8 @@ def initialize; end
272272
metadata1 = idp_metadata_parser.parse_to_hash(idp_metadata1)
273273
metadata2 = idp_metadata_parser.parse_to_hash(idp_metadata2)
274274

275-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", metadata1[:idp_cert_fingerprint]
276-
assert_equal "CD:2B:2B:DA:FF:F5:DB:64:10:7C:AC:FD:FE:0F:CB:5D:73:5F:16:07", metadata2[:idp_cert_fingerprint]
275+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", metadata1[:idp_cert_fingerprint]
276+
assert_equal "E5:52:D9:2C:3C:DC:3D:09:5C:90:76:82:AB:B6:75:B4:92:92:2C:42:87:7E:18:EB:17:F3:1F:39:FE:9F:7C:6A", metadata2[:idp_cert_fingerprint]
277277
end
278278
end
279279

@@ -320,7 +320,7 @@ def initialize; end
320320
assert_equal "https://hello.example.com/access/saml/idp.xml", settings.idp_entity_id
321321
assert_equal "https://hello.example.com/access/saml/login", settings.idp_sso_service_url
322322
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", settings.idp_sso_service_binding
323-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.idp_cert_fingerprint
323+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.idp_cert_fingerprint
324324
assert_equal "https://hello.example.com/access/saml/logout", settings.idp_slo_service_url
325325
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", settings.idp_slo_service_binding
326326
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", settings.name_identifier_format
@@ -356,7 +356,7 @@ def initialize; end
356356
assert_equal "https://hello.example.com/access/saml/idp.xml", parsed_metadata[:idp_entity_id]
357357
assert_equal "https://hello.example.com/access/saml/login", parsed_metadata[:idp_sso_service_url]
358358
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", parsed_metadata[:idp_sso_service_binding]
359-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", parsed_metadata[:idp_cert_fingerprint]
359+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", parsed_metadata[:idp_cert_fingerprint]
360360
assert_equal "https://hello.example.com/access/saml/logout", parsed_metadata[:idp_slo_service_url]
361361
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", parsed_metadata[:idp_slo_service_binding]
362362
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", parsed_metadata[:name_identifier_format]
@@ -467,7 +467,7 @@ def initialize; end
467467
assert_equal "urn:oasis:names:tc:SAML:1.1:nameid-format:unspecified", @settings.name_identifier_format
468468
assert_equal "https://hello.example.com/access/saml/login", @settings.idp_sso_service_url
469469
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", @settings.idp_sso_service_binding
470-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", @settings.idp_cert_fingerprint
470+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", @settings.idp_cert_fingerprint
471471
assert_equal "https://hello.example.com/access/saml/logout", @settings.idp_slo_service_url
472472
assert_equal "urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect", @settings.idp_slo_service_binding
473473
assert_equal ["AuthToken", "SSOStartPage"], @settings.idp_attribute_names
@@ -477,10 +477,10 @@ def initialize; end
477477
it "should handle multiple descriptors at once" do
478478
settings = @idp_metadata_parser.parse_to_array(@idp_metadata)
479479
assert_equal "https://foo.example.com/access/saml/idp.xml", settings.first[:idp_entity_id]
480-
assert_equal "F1:3C:6B:80:90:5A:03:0E:6C:91:3E:5D:15:FA:DD:B0:16:45:48:72", settings.first[:idp_cert_fingerprint]
480+
assert_equal "C4:C6:BD:41:EC:AD:57:97:CE:7B:7D:80:06:C3:E4:30:53:29:02:0B:DD:2D:47:02:9E:BD:85:AD:93:02:45:21", settings.first[:idp_cert_fingerprint]
481481
assert_equal '2014-04-17T18:02:33.910Z', settings.first[:valid_until]
482482
assert_equal "https://bar.example.com/access/saml/idp.xml", settings.last[:idp_entity_id]
483-
assert_equal "08:EB:6E:60:A2:14:4E:89:EC:FA:05:74:9D:72:BF:5D:BE:54:F0:1A", settings.last[:idp_cert_fingerprint]
483+
assert_equal "74:E4:FA:29:20:26:36:8A:72:5E:9D:CF:4F:8E:1F:DC:D4:CE:E2:3C:9D:6F:93:35:A1:A7:8A:4D:79:83:21:D0", settings.last[:idp_cert_fingerprint]
484484
assert_equal '2014-04-17T18:02:33.910Z', settings.last[:valid_until]
485485
end
486486
end
@@ -649,7 +649,7 @@ def initialize; end
649649

650650
it "should return idp_cert and idp_cert_fingerprint and no idp_cert_multi" do
651651
assert_equal(expected_cert, @settings.idp_cert)
652-
assert_equal("2D:A9:40:88:28:EE:67:BB:4A:5B:E0:58:A7:CC:71:95:2D:1B:C9:D3", @settings.idp_cert_fingerprint)
652+
assert_equal("46:E3:68:F4:ED:61:43:2B:EC:36:E3:99:E9:03:4B:99:E5:B3:58:EF:A9:A9:00:FC:2D:C8:7C:14:C6:60:E3:8F", @settings.idp_cert_fingerprint)
653653
assert_equal({ :signing => [expected_cert], :encryption => [expected_cert] }, @settings.idp_cert_multi)
654654
assert_equal("https://app.onelogin.com/saml/metadata/383123", @settings.idp_entity_id)
655655
assert_equal("urn:oasis:names:tc:SAML:1.1:nameid-format:emailAddress", @settings.name_identifier_format)

0 commit comments

Comments
 (0)