letsencrypt-cli 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 7251081d8f3dd853b125c43b1fa7db980e7db06e
4
- data.tar.gz: 684292ac3a356c97695d54844569c71360ad2031
3
+ metadata.gz: a5b3813e16fc68f65ed8fa6ce4950f9795347700
4
+ data.tar.gz: 18b2289f486d78fe6271177173acbf2c31851754
5
5
  SHA512:
6
- metadata.gz: 36698d3993b69182c14159541c3cdac47b2adc81b6bbe1e151c831d1c30f9c5fc7b11d6c7966d3eb20d30c9ae8d08de876d286e14e83e466028acf4fdfcd3ef4
7
- data.tar.gz: 7058f1ce08fa09ef1516de2958da9d410c0a73fbff267385349dee97823e116bda8305ce9b99b9175b0df5a9b558506d79a6a1e5447cdf2600a540abe401e84a
6
+ metadata.gz: 61d3c309f9f88de49af7c8ada2af58e836603da55eebf4b1dab1a10e21b179d9a941a14711e7de3f794e67d662cb20dc157c57d1415576baabb133775c52ba2e
7
+ data.tar.gz: a32ea34099e4ef5ef1a856bfe1d3dc2a1291d8fa4fcc6cee76152d750a19ede4fcee28716fb601173b5f680587b5975b2275166bb1bc79030323df2080d31184
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Letsencrypt::Cli
1
+ # Letsencrypt-Cli
2
2
 
3
3
  [![Build Status](https://travis-ci.org/zealot128/ruby-letsencrypt-cli.svg?branch=travis)](https://travis-ci.org/zealot128/ruby-letsencrypt-cli)
4
4
  [![Gem Version](https://badge.fury.io/rb/letsencrypt-cli.svg)](https://badge.fury.io/rb/letsencrypt-cli)
@@ -7,11 +7,44 @@ Yet another Letsencrypt client using Ruby.
7
7
 
8
8
  ## Installation
9
9
 
10
- * This tool needs Ruby > 2.0 (as the dependency acme needs that).
11
- * openssl bindings
12
- * no sudo! (Just access to webserver root .well-known alias)
10
+ * This tool needs Ruby >= 2.1 (as the dependency ``acme-client`` needs that because of use of keyword arguments).
11
+ * OpenSSL bindings
12
+ * no sudo! (needs access to webserver-root ``/.well-known/acme-challenges`` alias for all domains - See later section for Nginx example)
13
13
 
14
- $ gem install letsencrypt-cli
14
+ ```
15
+ # check your ruby version:
16
+ $ ruby --version
17
+ ruby 2.2.3p173 (2015-08-18 revision 51636) [x86_64-linux]
18
+
19
+ $ gem install letsencrypt-cli
20
+
21
+ $ letsencrypt-cli --version
22
+ 0.1.2
23
+ ```
24
+
25
+ ### Troubleshooting Ruby version
26
+
27
+ Unfortunately, most Linux distributions does not ship a current Ruby version (Version 1.9.3 or 2.0).
28
+
29
+ If you are installing this as a non-root user, you might want to try RVM (needs no root:
30
+
31
+ ```
32
+ gpg --keyserver hkp://keys.gnupg.net --recv-keys 409B6B1796C275462A1703113804BB82D39DC0E3
33
+ \curl -sSL https://get.rvm.io | bash -s stable --autolibs=disable --auto-dotfiles
34
+
35
+ rvm install 2.2
36
+ source ~/.bashrc # or ~/.profile RVM tells you to reload your shell
37
+
38
+ ruby --version
39
+ ```
40
+
41
+ Notice: If you are using RVM, all your cronjobs must be run as a login shell, otherwise RVM does not work:
42
+
43
+ ```cron
44
+ * * * * * /bin/bash -l -c "letsencrypt-cli manage ..."
45
+ ```
46
+
47
+ Another way, e.g. on Ubuntu 14.04 might be to use the [Brightbox ppa](https://www.brightbox.com/blog/2015/01/05/ruby-2-2-0-packages-for-ubuntu/).
15
48
 
16
49
  ## Usage
17
50
 
@@ -52,7 +85,45 @@ letsencrypt-cli check --days-valid 30 cert.pem
52
85
  ```
53
86
 
54
87
 
55
- ## Example integration nginx:
88
+ And last but not least, the meta command ``manage`` that integrated check + authorize + cert (intended to be run as cronjob):
89
+
90
+ ```bash
91
+ $ letsencrypt-cli manage --days-valid 30 \
92
+ --account-key /home/letsencrypt/account_key.pem \
93
+ --webroot-path /home/letsencrypt/webroot/.well-known/acme-challenge \
94
+ --key-directory /home/letsencrypt/certs \
95
+ example.com www.example.com
96
+
97
+ 2015-12-05 23:40:04 +0100: Certificate /home/letsencrypt/certs/example.com/cert.pem does not exists
98
+ 2015-12-05 23:40:04 +0100: Authorizing example.com...
99
+ 2015-12-05 23:40:04 +0100: existing account key found
100
+ 2015-12-05 23:40:06 +0100: Authorization successful for example.com
101
+ 2015-12-05 23:40:06 +0100: Authorizing www.example.com
102
+ 2015-12-05 23:40:08 +0100: Authorization successful for www.example.com
103
+ 2015-12-05 23:40:08 +0100: creating new private key to /home/letsencrypt/certs/example.com/key.pem...
104
+ 2015-12-05 23:40:09 +0100: Certificate successfully created to /home/letsencrypt/certs/example.com/fullchain.pem /home/letsencrypt/certs/example.com/chain.pem
105
+ and /home/letsencrypt/certs/example.com/cert.pem!
106
+ 2015-12-05 23:40:09 +0100: Certificate valid until: 2016-03-04 21:40:00 UTC
107
+
108
+ # Run command again exits immediately:
109
+ $ letsencrypt-cli manage --days-valid 30 --account-key /home/letsencrypt/account_key.pem --webroot-path /home/letsencrypt/webroot/.wel
110
+ l-known/acme-challenge --key-directory /home/letsencrypt/certs \
111
+ example.com www.example.com
112
+ 2015-12-05 23:40:17 +0100: Certificate '/home/letsencrypt/certs/example.com/cert.pem' valid until 2016-03-04.
113
+ $ echo $?
114
+ 1
115
+ ```
116
+
117
+ This had:
118
+
119
+ 1. check if /home/letsencrypt/certs/example.com/cert.pem exists and expires in less than 30 days (or exit 1 at this point)
120
+ 2. authorize all domains + subdomains
121
+ 3. issue one certificate with those domains and place it under /home/letsencrypt/certs/example.com/[key.pem,fullchain.pem,chain.pem,cert.pem]
122
+ 4. exit 0 -> so can be && with ``service nginx reload`` or mail deliver
123
+
124
+ For running as cron, reducing log level to fatal might be desirable: ``letsencrypt-cli manage --log-level fatal``.
125
+
126
+ ## Example integration Nginx:
56
127
 
57
128
  ```nginx
58
129
  server {
@@ -72,10 +143,10 @@ Afterwards, use the fullchain.pem and key.pem:
72
143
  ```nginx
73
144
  server {
74
145
  listen 443 ssl;
75
- server_name stefanwienert.de www.stefanwienert.de;
146
+ server_name example.com www.example.com;
76
147
  ssl on;
77
- ssl_certificate_key /path/to/key.pem;
78
- ssl_certificate /path/to/fullchain.pem;
148
+ ssl_certificate_key /home/letsencrypt/certs/example.com/key.pem;
149
+ ssl_certificate /home/letsencrypt/certs/example.com/fullchain.pem;
79
150
 
80
151
  # use the settings from: https://gist.github.com/konklone/6532544
81
152
  ```
@@ -88,7 +159,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
88
159
 
89
160
  ## Contributing
90
161
 
91
- 1. Fork it ( https://github.com/zealot128/letsencrypt-cli/fork )
162
+ 1. Fork it ( https://github.com/zealot128/ruby-letsencrypt-cli/fork )
92
163
  2. Create your feature branch (`git checkout -b my-new-feature`)
93
164
  3. Commit your changes (`git commit -am 'Add some feature'`)
94
165
  4. Push to the branch (`git push origin my-new-feature`)
@@ -70,11 +70,32 @@ module Letsencrypt
70
70
  end
71
71
  end
72
72
 
73
- map %w[--version -v] => :__print_version
74
- desc "--version, -v", "print the version"
75
- def __print_version
76
- puts Letsencrypt::Cli::VERSION
77
- end
73
+ desc "manage DOMAINS", "meta command that will: check if cert already exists / still valid (exits zero if nothing todo) + authorize given domains + issue certificate for given domains"
74
+ method_option :key_length, desc: "Length of private key", default: 2048, type: :numeric
75
+ method_option :days_valid, desc: "If the --certificate-path already exists, only create new stuff, if that certificate isn't valid for less than the given number of days", default: 30, type: :numeric
76
+ method_option :webroot_path, desc: "Path to mapped .well-known/acme-challenge folder (no subdirs will be created)", aliases: '-w', required: true
77
+ method_option :key_directory, desc: "Base directory of key creation. A subfolder with the first domain will be created where all certs + key are stored", default: "~/certs/"
78
+ def manage(*domains)
79
+ key_dir = File.join(@options[:key_directory], domains.first)
80
+ FileUtils.mkdir_p(key_dir)
81
+ @options = @options.merge(
82
+ :private_key_path => File.join(key_dir, 'key.pem'),
83
+ :fullchain_path => File.join(key_dir, 'fullchain.pem'),
84
+ :certificate_path => File.join(key_dir, 'cert.pem'),
85
+ :chain_path => File.join(key_dir, 'chain.pem'),
86
+ )
87
+ if wrapper.check_certificate(@options[:certificate_path])
88
+ exit 1
89
+ end
90
+ authorize(*domains)
91
+ cert(*domains)
92
+ end
93
+
94
+ map %w[--version -v] => :__print_version
95
+ desc "--version, -v", "print the version"
96
+ def __print_version
97
+ puts Letsencrypt::Cli::VERSION
98
+ end
78
99
 
79
100
  private
80
101
 
@@ -1,5 +1,5 @@
1
1
  module Letsencrypt
2
2
  module Cli
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: letsencrypt-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stefan Wienert