summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spec/install/security_policy_spec.rb78
-rw-r--r--spec/support/builders.rb68
-rw-r--r--spec/support/path.rb4
3 files changed, 150 insertions, 0 deletions
diff --git a/spec/install/security_policy_spec.rb b/spec/install/security_policy_spec.rb
new file mode 100644
index 0000000000..df5e81ee72
--- /dev/null
+++ b/spec/install/security_policy_spec.rb
@@ -0,0 +1,78 @@
+require "spec_helper"
+require 'rubygems/format'
+require 'rubygems/security'
+
+# unfortunately, testing signed gems with a provided CA is extremely difficult
+# as 'gem cert' is currently the only way to add CAs to the system.
+
+describe "policies with unsigned gems" do
+ before do
+ build_security_repo
+ gemfile <<-G
+ source "file://#{security_repo}"
+ gem "rack"
+ gem "signed_gem"
+ G
+ end
+
+ it "works after you try to deploy without a lock" do
+ bundle "install --deployment"
+ bundle :install, :exitstatus => true
+ expect(exitstatus).to eq(0)
+ should_be_installed "rack 1.0", "signed_gem 1.0"
+ end
+
+ it "fails when given invalid security policy" do
+ bundle "install --policy=InvalidPolicyName"
+ expect(out).to include("You have specified an invalid security policy.")
+ end
+
+ it "fails with High Security setting due to presence of unsigned gem" do
+ bundle "install --policy=HighSecurity", :exitstatus => true
+ expect(out).to include("Error loading gem at")
+ end
+
+ it "fails with Medium Security setting due to presence of unsigned gem" do
+ bundle "install --policy=MediumSecurity"
+ expect(out).to include("Error loading gem at")
+ end
+
+ it "succeeds with no policy" do
+ bundle "install", :exitstatus => true
+ expect(exitstatus).to eq(0)
+ end
+
+end
+
+describe "policies with signed gems, no CA" do
+ before do
+ build_security_repo
+ gemfile <<-G
+ source "file://#{security_repo}"
+ gem "signed_gem"
+ G
+ end
+
+ it "fails with High Security setting, gem is self-signed" do
+ bundle "install --policy=HighSecurity"
+ expect(out).to include("Error loading gem at")
+ end
+
+ it "fails with Medium Security setting, gem is self-signed" do
+ bundle "install --policy=MediumSecurity"
+ expect(out).to include("Error loading gem at")
+ end
+
+ it "succeeds with Low Security setting, low security accepts self signed gem" do
+ bundle "install --policy=LowSecurity", :exitstatus => true
+ expect(exitstatus).to eq(0)
+ should_be_installed "signed_gem 1.0"
+ end
+
+ it "succeeds with no policy" do
+ bundle "install", :exitstatus => true
+ expect(exitstatus).to eq(0)
+ should_be_installed "signed_gem 1.0"
+ end
+
+end
diff --git a/spec/support/builders.rb b/spec/support/builders.rb
index 8b529e5099..ebb132ba70 100644
--- a/spec/support/builders.rb
+++ b/spec/support/builders.rb
@@ -265,6 +265,22 @@ module Spec
end
end
+ def build_security_repo
+ build_repo security_repo do
+ build_gem "rack"
+
+ build_gem "signed_gem" do |s|
+ cert = 'signing-cert.pem'
+ pkey = 'signing-pkey.pem'
+ s.write cert, TEST_CERT
+ s.write pkey, TEST_PKEY
+ s.signing_key = pkey
+ s.cert_chain = [cert]
+ end
+ end
+
+ end
+
def build_repo(path, &blk)
return if File.directory?(path)
rake_path = Dir["#{Path.base_system_gems}/**/rake*.gem"].first
@@ -601,5 +617,57 @@ module Spec
@context.gem_repo1('gems')
end
end
+
+ TEST_CERT=<<CERT
+-----BEGIN CERTIFICATE-----
+MIIDLDCCAhSgAwIBAgIBADANBgkqhkiG9w0BAQUFADA8MRAwDgYDVQQDDAdleGFt
+cGxlMRMwEQYKCZImiZPyLGQBGRYDZm9vMRMwEQYKCZImiZPyLGQBGRYDY29tMB4X
+DTEzMDIwNDIxMTYzNVoXDTE0MDIwNDIxMTYzNVowPDEQMA4GA1UEAwwHZXhhbXBs
+ZTETMBEGCgmSJomT8ixkARkWA2ZvbzETMBEGCgmSJomT8ixkARkWA2NvbTCCASIw
+DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANVgibTKM0ux14SXQU9M2Ec2mTHG
+hoPJl/3Qq+p4wEalT87/Ascc2BaT6hXWWfAJ4oxReZnPfVop+fXZZDgtVC0JijPC
+v+5JHs5KLEG1N+wzaVI7238yv4N62t48XD585bPp1meiVh9wE2kdax1bIJBwcRhd
+gzR5kFfr2+O7u/g1nO/LN6aAWlKBXqntUmG0wEoWAibWDqpv4AIJhSGrzAqw648F
+5TWiOEvKyrwohAt7IWbmiS8Cr3qT+GSq6tR9Hi6IC8vFW0gBvd1pSX25oUjdNApX
+lzf6zkqBTzek9R7FN6TiymbJfCqaMz55rNAGZDDX0DOqJIvRTR6I2MQSfJsCAwEA
+AaM5MDcwCQYDVR0TBAIwADAdBgNVHQ4EFgQULUiq0A8j8lc03KGvxV4a0tuBqfUw
+CwYDVR0PBAQDAgSwMA0GCSqGSIb3DQEBBQUAA4IBAQBMqoR/F94kK2ou9Yff+DMp
+b/hXEnl8lXzW0euUiTQcVRX6HO2AqGTqdZemUmm1uetGiozsuA1nbPInZQTL/zQq
+oNbg60JxlKWStxF3zsZdKVDNXsXWg4WlzvF6qd4AjDCO//e/BHHe44r+vASqglYO
+zTrTWYgjtDmPOLDvZTHhZ3kBV0Q0pGCBi7f0VYpqjEHSeyRfqJH1LT8yYC3vuYzZ
+PPIub1CZNnaS4jvtSKZsEzaijftwI7ddt/S9Yt7BahUrfHCMrA/Nt3XSDu0BcgaF
+cxrVBbDO8ELUvTY1yFcMYE1gzTIPCYE9TWXgm7A9HcD/7XLXkUL6nuvG3wwpBPTa
+-----END CERTIFICATE-----
+CERT
+
+ TEST_PKEY=<<PKEY
+-----BEGIN RSA PRIVATE KEY-----
+MIIEogIBAAKCAQEA1WCJtMozS7HXhJdBT0zYRzaZMcaGg8mX/dCr6njARqVPzv8C
+xxzYFpPqFdZZ8AnijFF5mc99Win59dlkOC1ULQmKM8K/7kkezkosQbU37DNpUjvb
+fzK/g3ra3jxcPnzls+nWZ6JWH3ATaR1rHVsgkHBxGF2DNHmQV+vb47u7+DWc78s3
+poBaUoFeqe1SYbTAShYCJtYOqm/gAgmFIavMCrDrjwXlNaI4S8rKvCiEC3shZuaJ
+LwKvepP4ZKrq1H0eLogLy8VbSAG93WlJfbmhSN00CleXN/rOSoFPN6T1HsU3pOLK
+Zsl8KpozPnms0AZkMNfQM6oki9FNHojYxBJ8mwIDAQABAoIBAD8AD+iXQun4il+V
+oSzezYTJNBYkPZcvsHa6Y+gI2wyAxr2hQZq0g4C3D4h/D3L2GDPB4pttTd+PQUQ7
+eYG0sIPTq0B5Id4jLLtP3x1PekF9NH2ZOselnjId1f2D6OByVAf45NsYbUE/ABwr
+GXNDcqvy5xGAmrqlod6zvurQhUFVWNYw1Ry6MCxD79S54Rky9cv6qzviPAh570y+
+aWS+lXJeqVVhmwWnbOUBWu/8dsniJbknassxwOYCShNLGnPMW+gklPaUucOkDF8K
+R0xYbOpAowQaIOdm7sQtt/CZOD34pgAWlLMev/J5y7+y6jvdqBMoLKIMAj/YqphW
+FqOY4fECgYEA9t5MqdexzOpz5LTQbqUDDiMtVR5mn/7wPbgNCRuAADTuM8QJkREe
+JCEG/S9CEmefoa6gr+CyWhq9qbFhLC7rEgBCInW/hL5m8qGVAVcpIUCbpYh7nirN
+fHQP6zL2RESmJDo3Y0vLZosR+XR1UDSb3tdTQSXt/MX6p+gjcswnzN0CgYEA3UUY
+ew22HjB1dnS7ps/gdsNwlalYYwSkfuBqNkluvMRE56HGbKeDYjEV4egkWZVYUNDJ
+P+jVKUTOSfgzXOsR7rKeiaQ3UEZfVpV3iQWtqzS2+BlhWBoQsBLD5CjdP8ykOQGr
+NQVNegXAFGhsiRNwm4Mpl5+t+Ap9aqSy1WwAu9cCgYBwY0vrlrLvY11XpamudZkq
+eoFM2wZFmL6umnf0yXxAm9hF4N2qGWzrbc3MvhMKZfqalPG6oEUSGFJ4SrS+dK24
+CD4Tih+iwzwDAeTgM1oaNVumxLfijgH2wq/sl8rd0ZMBsy88GWmESZPpSUePOCQu
+E0Fny2jJRyiSAHEC9ka4UQKBgDFBmWKDOeBcjzlwYPmQWvp1JVHbodZhCTFJSbuN
++z3AP0qFA8PaQnAQVzuzzqu2iDNtVu+IKDOIopdqzhxII/TMBGjFip6vG7gNi8+P
+2Qo8sOJn2/idzMs1UjAvPJlgN8qM6YzjAk1AjHK+kDKvhijIOPEM1dBanXKo+Tpz
+UXJ/AoGABULY7oaW7vW7XLiHVTHeoqi9m9yNTVQRnsMFJm5GhisjavZbCzCGz1Tl
+hiIdZiAgSpltgy7+R7l7JhmFf04xVnEJc/4lyJc4ZwYXkMGqD1tE9FXowbBFKktB
+cPFVDEsR7SPkiAmGm99WiigexSwxW9hl+TjgolcXG7HTDsES2Sg=
+-----END RSA PRIVATE KEY-----
+PKEY
end
end
diff --git a/spec/support/path.rb b/spec/support/path.rb
index de910ca145..3b981f74e1 100644
--- a/spec/support/path.rb
+++ b/spec/support/path.rb
@@ -56,6 +56,10 @@ module Spec
tmp("gems/remote3", *args)
end
+ def security_repo(*args)
+ tmp("gems/security_repo", *args)
+ end
+
def system_gem_path(*path)
tmp("gems/system", *path)
end