シリーズ:さくらサーバーで遊ぶ | |
---|---|
設定等のメモ | http://qiita.com/cielavenir/items/67a7c631713b4c816b6d |
SSL化 | http://qiita.com/cielavenir/items/aad29b2348fc4d3f9155 |
(さくらサーバー導入の主目的) メールをフックする |
http://qiita.com/cielavenir/items/5ce4568fc405329d421a |
Linuxbrewを導入する(旧) | http://qiita.com/cielavenir/items/741921fcecb281555f77 |
Homebrewを導入する | https://qiita.com/cielavenir/items/67ce0ec9cd8d43ed00f1 |
さくらサーバーでgccへの依存が発生しない理由 (HOMEBREW_BUILD_FROM_SOURCE=1は不要) |
https://qiita.com/cielavenir/items/410ded536d9b520989c4 |
前説
さくらサーバー(マネージド/専有で無いほう)はroot権限がないので、SSL化をさくらサーバー内で完結するにはやや複雑な手順が必要となる。
PYTHONPATHとかでエラーが出る場合は適宜私の設定を参照して下さい。
certbotの導入
pipの導入
mkdir -p ~/local/lib/python2.7/site-packages/
ls -s local ~/.local
easy_install --prefix=$HOME/local pip
cffiの導入
http://pkg.freebsd.org/FreeBSD:9:amd64/latest/All/libffi-3.2.1.txz を~/local/libや~/local/include配下にうまく展開。manとかは不要。
その後、以下のようにすれば導入できます。-Rはrpathのオプションです。
~/local/bin/pip install --upgrade --user -I setuptools
~/local/bin/pip install --global-option=build_ext --global-option="-I/home/USER/local/include" --global-option="-L/home/USER/local/lib" --global-option="-R/home/USER/local/lib" --user cffi
certbotの導入
/usr/local/ssl/を使ってもらう必要があるが、こちらは、/usr/local/libdata/ldconfig/opensslにrpathの記載があるため、-Rは不要。
~/local/bin/pip install --global-option=build_ext --global-option="-I/usr/local/ssl/include" --global-option="-L/usr/local/ssl/lib" --user cryptography
~/local/bin/pip install --user certbot
Ruby-mechanizeの導入
rbenvは(設定等のメモに書かれた方法で)導入済みとします。
(さくらコントロールパネルはTLS1.2が必要なので、Rubyビルド時にOpenSSLディレクトリ指定が必要です)
gem install pkg-config
gem install nokogiri -- --with-opt-include=/usr/local/include --with-opt-lib=/usr/local/lib --use-system-libraries
gem install mechanize
※savonを導入したい場合は、mechanizeについては改造版を入れる必要があります
https://github.com/sparklemotion/mechanize/issues/407
証明書取得
certbot実行
DOMAINにはsakura.ne.jpは指定できないと思われる。発行部数が上限を超えている他、コントロールパネルに証明書登録画面がない。
local/bin/certbot certonly --webroot --config-dir=letsencrypt/config --work-dir=letsencrypt/work --logs-dir=letsencrypt/logs -w /home/USER/www/ -d DOMAIN
証明書のアップロード
#!/usr/bin/env /home/cielavenir/.rbenv/shims/ruby
#coding:utf-8
require 'mechanize'
COREDOMAIN='USER.sakura.ne.jp'
PASSWORD=''
DOMAIN=''
agent=Mechanize.new
agent.ca_file='/usr/local/share/certs/ca-root-nss.crt'
agent.get('https://secure.sakura.ad.jp/rscontrol/rs')
form=agent.page.form_with(:name => 'login')
form.domain=COREDOMAIN
form.password=PASSWORD
form.click_button
agent.get("https://secure.sakura.ad.jp/rscontrol/rs/ssl?SNIDomain=#{DOMAIN}")
form=agent.page.forms.find{|e|e.button_with(:value => '秘密鍵を含む新しい設定の作成')}
form.click_button if form
form=agent.page.forms.find{|e|e.button_with(:value => '秘密鍵をアップロードする')}
form.file_upload.file_name="letsencrypt/config/live/#{DOMAIN}/privkey.pem"
form.file_upload.mime_type="application/x-x509-ca-cert"
form.click_button
#証明書のインストール
form=agent.page.forms.find{|e|e.field_with(:name => 'Cert')}
form.Cert=File.read("letsencrypt/config/live/#{DOMAIN}/cert.pem")
form.click_button
#中間証明書のインストール
agent.get("https://secure.sakura.ad.jp/rscontrol/rs/ssl?CACert=1&SNIDomain=#{DOMAIN}")
form=agent.page.forms.find{|e|e.field_with(:name => 'Cert')}
form.Cert=File.read("letsencrypt/config/live/#{DOMAIN}/chain.pem")
form.click_button
#証明書の更新である場合、更新を適用する
agent.get("https://secure.sakura.ad.jp/rscontrol/rs/ssl?SNIDomain=#{DOMAIN}")
form=agent.page.forms.find{|e|e.button_with(:value => '新しい設定を有効化する')}
if form
form.checkboxes[0].checked=true
form.click_button
end