muchsecrets 0.0.2 → 0.0.3
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.
- checksums.yaml +4 -4
- data/README.md +48 -4
- data/bin/muchsecrets +94 -0
- data/lib/muchsecrets.rb +0 -1
- data/lib/muchsecrets/secret.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 46a037577a9dd00f6d594cee1d3a7b12f53fd510
|
4
|
+
data.tar.gz: fe3f8ca23d1b1dbc6bfaf51ca70c467b5e878a6e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: db9a765ec0505bdf95642762527bc4e7bfcc010106d661e0fd822510eefda6342f40320cd40d894c40fc14d630fbefa925735d7551153b2cb0b13ce83f057e48
|
7
|
+
data.tar.gz: 6e4f82f2c02c1567a7fa7897989ae46caf6384131324c4429712346c42f370b818f25be1985688829e65cc637b9fd799bae82cd68feb55550ede64b78cdee649
|
data/README.md
CHANGED
@@ -11,10 +11,46 @@ What's this useful for? Pulling encrypted secrets from [Consul](https://consul.i
|
|
11
11
|
:$ openssl req -new -newkey rsa:4096 -nodes -x509 -keyout application.pem -out application.pem
|
12
12
|
````
|
13
13
|
|
14
|
-
2. store your
|
14
|
+
2. store your keypair some place safe.
|
15
|
+
|
15
16
|
|
16
17
|
## Usage ##
|
17
18
|
|
19
|
+
Use the command line executable to encrypt:
|
20
|
+
```
|
21
|
+
:$ muchsecrets --encrypt --publickey shared-production-wc1.pem --string "such_privacy"
|
22
|
+
|
23
|
+
-----BEGIN PKCS7-----
|
24
|
+
MIIDMwYJKoZIhvcNAQcDoIIDJDCCAyACAQAxggLgMIIC3AIBADCBwzCBtTELMAkG
|
25
|
+
A1UEBhMCVVMxDzANBgNVBAgTBk9yZWdvbjERMA8GA1UEBxMIUG9ydGxhbmQxHjAc
|
26
|
+
BgNVBAoTFUdvbGRzdGFyIEV2ZW50cywgSW5jLjEeMBwGA1UECxMVc2hhcmVkLXBy
|
27
|
+
b2R1Y3Rpb24td2MxMSEwHwYDVQQDExhodHRwczovL3d3dy5nb2xkc3Rhci5jb20x
|
28
|
+
HzAdBgkqhkiG9w0BCQEWEG9wc0Bnb2xkc3Rhci5jb20CCQCASRiabrpfIjANBgkq
|
29
|
+
hkiG9w0BAQEFAASCAgAxVwDR9gvGQUayj34tJLcwjT5JDYHjf3RTdmf5HDANMgoy
|
30
|
+
WrJJY74hx5fskZLuvbptHI4/RDd/uB4LQHAiMel/wK/YSPcUC3rCDsII9L4jOc7o
|
31
|
+
K/rz9VPUAiVcGFfE4R1HQkYIcwKsgZg0FiImNZgxRCpx9Gn1YhxxY3+A46fRA2Ym
|
32
|
+
JcHJHfvLK0CMMmGU3Q3dTgpD9oZ2UWkWf1dw6XvtpaVs6BJNoA/9PDK6Teik++Om
|
33
|
+
gMuzd0VI8mxPoNBiH4GVpZzfKyUDg7zJQtELsTmVbwdae88I4wrIjZNEIg+2GBTC
|
34
|
+
wqsG+7jdMuP0YeTsKWLmAzOVyLfJmMzqMAJ5i31jvYFnyeDymjzLvJvly2mW1UdQ
|
35
|
+
6dJHFNyneK4uHsE8G5kJ9MoaYrZWtwA1DgaiNjCbaRqTfDScxGyYTE3gvJetU1Lx
|
36
|
+
H6wqht2HXzps61zSGAyeEac8CvTyub0ub86tEZ5GD4GU6VqKvEnvtoe/t1NK6E38
|
37
|
+
vc0t/lvY9zledBI/z+dp3IumCQcKhxX1V4JKxn3yB2WdXJZbFfg92pf/NtDeHdR8
|
38
|
+
PwcYuruEYYK8WF+cNApFsRmeAa+tL1J9f/K+4x65rhRja/fbTQFvWMe3hkybbgql
|
39
|
+
BZqnjg5EqoAk/yVoq9joGmjg6ujkezgNJJ0u1pvJi1QRQhA8v7nZ+swpqZ0fxjA3
|
40
|
+
BgkqhkiG9w0BBwEwHQYJYIZIAWUDBAEsBBB0gcWyiwNgAVMXLUCSfTrkgAsM77Vi
|
41
|
+
DClnGP48kw==
|
42
|
+
-----END PKCS7-----
|
43
|
+
```
|
44
|
+
|
45
|
+
Use the command line to decrypt directly from consul:
|
46
|
+
```
|
47
|
+
:$ muchsecrets --decrypt --publickey application.pem --privatekey application.pem --consul secrets/wow
|
48
|
+
|
49
|
+
foo bar baz
|
50
|
+
```
|
51
|
+
|
52
|
+
Or you can use it directly from your application.
|
53
|
+
|
18
54
|
To encrypt a string:
|
19
55
|
```ruby
|
20
56
|
require 'muchsecrets'
|
@@ -41,13 +77,21 @@ ZQMEASwEEMVOg3shVq9U1O7CzSDJfSyADex+cL6h7RnV1tRwDqI=
|
|
41
77
|
-----END PKCS7-----"
|
42
78
|
```
|
43
79
|
|
44
|
-
Push the encrypted string to consul.
|
80
|
+
Push the encrypted string to consul/whatever.
|
45
81
|
|
46
|
-
To decrypt a
|
82
|
+
To decrypt a key value directly from consul:
|
47
83
|
```ruby
|
48
84
|
require 'muchsecrets'
|
49
85
|
wow = MuchSecrets::Secret.new(:public_key => 'application.pem', :private_key => 'application.pem')
|
50
|
-
super_secret = wow.
|
86
|
+
super_secret = wow.get_consul_secret('notprod/github_api_key/encrypted') # would fetch http://consul:8500/v1/kv/notprod/github_api_key/encrypted?raw
|
87
|
+
# => "such_privacy"
|
88
|
+
```
|
89
|
+
|
90
|
+
To decrypt a key value directly from a web endpoint:
|
91
|
+
```ruby
|
92
|
+
require 'muchsecrets'
|
93
|
+
wow = MuchSecrets::Secret.new(:public_key => 'application.pem', :private_key => 'application.pem', :base_url => 'http://service:8080')
|
94
|
+
super_secret = wow.get_http_secret('notprod/github_api_key/encrypted') # would fetch http://service:8080/notprod/github_api_key/encrypted
|
51
95
|
# => "such_privacy"
|
52
96
|
```
|
53
97
|
|
data/bin/muchsecrets
ADDED
@@ -0,0 +1,94 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'optparse'
|
3
|
+
require 'muchsecrets'
|
4
|
+
|
5
|
+
options = {}
|
6
|
+
|
7
|
+
# Extra options to OptionParser reduce the amount of whitespace it introduces
|
8
|
+
# into the help message, making it easier to make the help message fit in a
|
9
|
+
# 80x24 window.
|
10
|
+
opts = OptionParser.new(nil, 24, ' ')
|
11
|
+
|
12
|
+
opts.banner = 'Usage: muchsecrets [options] [--file /path/to/file | --consul path/to/consul/key | --string "really private string"]'
|
13
|
+
|
14
|
+
# actions
|
15
|
+
opts.on('--encrypt', 'Encrypt it.') do |opt|
|
16
|
+
options[:encrypt] = opt
|
17
|
+
end
|
18
|
+
opts.on('--decrypt', 'Decrypt it.') do |opt|
|
19
|
+
options[:decrypt] = opt
|
20
|
+
end
|
21
|
+
|
22
|
+
# options
|
23
|
+
opts.on('--consulserver HOST', 'Consul server http address.') do |opt|
|
24
|
+
options[:consulserver] = opt
|
25
|
+
end
|
26
|
+
opts.on('--privatekey PRIVKEY', 'Location of your private key.') do |opt|
|
27
|
+
options[:privatekey] = opt
|
28
|
+
end
|
29
|
+
opts.on('--publickey PUBKEY', 'Location of your public key.') do |opt|
|
30
|
+
options[:publickey] = opt
|
31
|
+
end
|
32
|
+
|
33
|
+
# what to act on
|
34
|
+
opts.on('--file FILE', 'File to encrypt.') do |opt|
|
35
|
+
options[:file] = opt
|
36
|
+
end
|
37
|
+
opts.on('--consul KEY', 'Consul key to decrypt.') do |opt|
|
38
|
+
options[:consul] = opt
|
39
|
+
end
|
40
|
+
opts.on('--string "STRING"', 'Quoted string to encrypt.') do |opt|
|
41
|
+
options[:string] = opt
|
42
|
+
end
|
43
|
+
|
44
|
+
opts.on_tail('-h', '--help', 'Show this message.') do
|
45
|
+
puts opts
|
46
|
+
exit
|
47
|
+
end
|
48
|
+
|
49
|
+
opts.parse!
|
50
|
+
|
51
|
+
# Display a usage message if the user did not specify a valid action to perform.
|
52
|
+
if options.empty?
|
53
|
+
puts opts
|
54
|
+
exit
|
55
|
+
end
|
56
|
+
|
57
|
+
# I refuse to encrypt and decrypt at the same time.
|
58
|
+
if options[:encrypt] && options[:decrypt]
|
59
|
+
puts "you cannot pass the --encrypt flag at the same time as the --decrypt flag."
|
60
|
+
exit
|
61
|
+
# likewise, I refuse to do nothing.
|
62
|
+
elsif !options[:encrypt] && !options[:decrypt]
|
63
|
+
puts "you need to pass either --encrypt or --decrypt."
|
64
|
+
exit
|
65
|
+
end
|
66
|
+
|
67
|
+
# if we get here I guess we can do something.
|
68
|
+
if options[:encrypt]
|
69
|
+
# need the public key for encrypting.
|
70
|
+
abort "--encrypt needs the --publickey option passed." if !options[:publickey]
|
71
|
+
|
72
|
+
string_to_encrypt = ""
|
73
|
+
|
74
|
+
if options[:file]
|
75
|
+
string_to_encrypt = File.read(options[:file])
|
76
|
+
elsif options[:string]
|
77
|
+
string_to_encrypt = options[:string].to_s
|
78
|
+
end
|
79
|
+
|
80
|
+
# encrypt and print string
|
81
|
+
wow = MuchSecrets::Secret.new(:public_key => options[:publickey])
|
82
|
+
puts wow.encrypt_string(string_to_encrypt)
|
83
|
+
|
84
|
+
elsif options[:decrypt]
|
85
|
+
# need the public and private keys for decrypting.
|
86
|
+
abort "--decrypt needs the --publickey option passed." if !options[:publickey]
|
87
|
+
abort "--decrypt needs the --privatekey options passed." if !options[:privatekey]
|
88
|
+
|
89
|
+
wow = MuchSecrets::Secret.new(:public_key => options[:publickey], :private_key => options[:privatekey])
|
90
|
+
puts wow.get_consul_secret(options[:consul])
|
91
|
+
|
92
|
+
end
|
93
|
+
|
94
|
+
|
data/lib/muchsecrets.rb
CHANGED
data/lib/muchsecrets/secret.rb
CHANGED
@@ -15,6 +15,11 @@ module MuchSecrets
|
|
15
15
|
return decrypt_string(encrypted_secret)
|
16
16
|
end
|
17
17
|
|
18
|
+
def get_consul_secret(uri)
|
19
|
+
uri = uri + '?raw'
|
20
|
+
return get_http_secret(uri)
|
21
|
+
end
|
22
|
+
|
18
23
|
def encrypt_string(val)
|
19
24
|
cert = OpenSSL::X509::Certificate.new(File.read(@public_key))
|
20
25
|
return OpenSSL::PKCS7::encrypt([cert], val, @cipher, OpenSSL::PKCS7::BINARY)
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: muchsecrets
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pat O'Brien
|
@@ -13,12 +13,14 @@ dependencies: []
|
|
13
13
|
description: handles encrypting and decrypting secrets to/from consul.
|
14
14
|
email:
|
15
15
|
- muchsecrets@tetrisbocks.net
|
16
|
-
executables:
|
16
|
+
executables:
|
17
|
+
- muchsecrets
|
17
18
|
extensions: []
|
18
19
|
extra_rdoc_files: []
|
19
20
|
files:
|
20
21
|
- lib/muchsecrets/secret.rb
|
21
22
|
- lib/muchsecrets.rb
|
23
|
+
- bin/muchsecrets
|
22
24
|
- LICENSE
|
23
25
|
- README.md
|
24
26
|
homepage: http://github.com/poblahblahblah/muchsecrets
|