LoginSignup
1
0

More than 3 years have passed since last update.

さくらサーバーをリモートだけでSSL化する

Last updated at Posted at 2017-03-28
シリーズ:さくらサーバーで遊ぶ
設定等のメモ 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の導入

pip.sh
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のオプションです。

cffi.sh
~/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は不要。

certbot.sh
~/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ディレクトリ指定が必要です)

mechanize.sh
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は指定できないと思われる。発行部数が上限を超えている他、コントロールパネルに証明書登録画面がない。

certbot_exec.sh
local/bin/certbot certonly --webroot --config-dir=letsencrypt/config --work-dir=letsencrypt/work --logs-dir=letsencrypt/logs  -w /home/USER/www/ -d DOMAIN

証明書のアップロード

cert_upload.rb
#!/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
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0