OS X本地搭建https (譯)

本文地址 <a >Jimliu寫字的地方</a> 歡迎到訪碱工!

原文地址: <a >How to set up stress-free SSL on an OS X development machine
Raw
</a>

在Web開發(fā)中降低復(fù)雜性(讀惹迮:壓力)的最佳方法之一是最小化您的開發(fā)和生產(chǎn)環(huán)境之間的差異恨诱。在嘗試在本地計算機和生產(chǎn)環(huán)境中統(tǒng)一SSL方法后,我找到了一個工作流程跋涣,使得協(xié)議在所有環(huán)境保持相同养距。

大多數(shù)工作流程做出以下妥協(xié):

在服務(wù)器環(huán)境使用https矾端,在開發(fā)環(huán)境使用http
這是非常煩人的,因為它使環(huán)境不一致悼粮,并且協(xié)議選擇泄漏到堆棧拇泣。例如,當(dāng)使用cookie的安全標志時矮锈,Web應(yīng)用程序需要了解底層協(xié)議霉翔。如果你沒有得到這個,你的HTTP開發(fā)服務(wù)器將無法讀取它寫的cookies苞笨,或者更糟糕的是债朵,你的HTTPS生產(chǎn)服務(wù)器可以通過不安全的連接傳遞敏感的cookie。

在本地使用生產(chǎn)環(huán)境SSL證書
SSL憑證不應(yīng)輕易傳遞瀑凝,理想情況下應(yīng)僅存在于被認證的機器上序芦。此外,即使使用通配符證書粤咪,提出一個方案谚中,將開發(fā)主機和生產(chǎn)主機放在同一命名空間下有一些奇怪的情況(如果生產(chǎn)應(yīng)用程序是從myproject.com提供,開發(fā)應(yīng)用程序從哪里提供寥枝? )

完全放棄HTTPS
如果在2013年宪塔,這是沒錯的。

所以我的方法是分一下四步:

1.解決所有開發(fā)工作的頂級域名囊拜;
2.為每個項目創(chuàng)建通配符SSL證書某筐;
3.告訴OS X信任證書,避免HTTPS警告冠跷;
4.使用https南誊;

下面我們開始

如果你還沒有安裝homebrew那么請先安裝

ruby -e "$(curl -fsSL https://raw.github.com/mxcl/homebrew/go)"

解決域名解析到項目

將域名解析到本地最常用的方法是修改hosts,可是你卻需要給每一個你正在開發(fā)的項目添加一條解析記錄
先做一點小工作蜜托,我們就可以給我們所有的項目綁定域名而不去動我們的hosts抄囚。

<a >Dnsmasq</a>一個輕量級的DNS轉(zhuǎn)發(fā)器,可以幫我們完成這些工作橄务。

brew install dnsmasq
mkdir -pv $(brew --prefix)/etc
sudo cp -v $(brew --prefix dnsmasq)/homebrew.mxcl.dnsmasq.plist /Library/LaunchDaemons
sudo launchctl load -w /Library/LaunchDaemons/homebrew.mxcl.dnsmasq.plist
sudo mkdir -pv /etc/resolver

一旦安裝并運行幔托,我們需要選擇我們想要解決的TLD到我們的本地。 OS X保留.local TLD仪糖,許多開發(fā)人員使用.dev柑司,但我喜歡使用名稱作為TLD的想法,以便在同一項目的其他開發(fā)人員的上下文中更容易地推理我的本地環(huán)境锅劝。所以我要讓Dnsmasq在本地解析以我的OS X用戶ID結(jié)尾的所有主機(也稱為短名稱攒驰,以及在終端中鍵入whoami時得到的結(jié)果)。因為我的用戶id是jed故爵,這意味著從apple.jed到zebras.jed到apple.zebras.jed的一切將解析為127.0.0.1玻粪。

所有以下shell腳本假設(shè)您使用您的用戶標識作為您的頂級域名隅津,但感覺通過替換$(whoami)與您選擇的TLD相應(yīng)地更改它們。

echo "address=/.$(whoami)/127.0.0.1" | sudo tee -a $(brew --prefix)/etc/dnsmasq.conf
echo "nameserver 127.0.0.1" | sudo tee /etc/resolver/$(whoami)

現(xiàn)在我們需要驗證我們安裝的Dnsmasq是否生效劲室。

cd /Applications
sleep 1 && open "http://some.domain.$(whoami):9520" &
python -m SimpleHTTPServer 9520

這應(yīng)該打開一瀏覽器伦仍,顯示您的應(yīng)用程序文件夾的內(nèi)容,如下所示:

image
image

不過如果出錯很洋,瀏覽器會告訴我們找不到DNS:

error
error

如果出現(xiàn)這種情況充蓝,我們需要去重啟機器,或者檢查我們的安裝步驟喉磁。

為每個項目創(chuàng)建通配符SSL證書

現(xiàn)在我們的DNS配置已經(jīng)生效谓苟,下一步就是為域名創(chuàng)建通配符證書。

首先协怒,我們創(chuàng)建一個與我們項目名稱相同的文件夾涝焙。

mkdir ~/Desktop/myproject && cd $_

接下來,讓我們創(chuàng)建一個臨時配置文件孕暇,使用openssl來創(chuàng)建我們的證書仑撞。

cat > openssl.cnf <<-EOF
  [req]
  distinguished_name = req_distinguished_name
  x509_extensions = v3_req
  prompt = no
  [req_distinguished_name]
  CN = *.${PWD##*/}.$(whoami)
  [v3_req]
  keyUsage = keyEncipherment, dataEncipherment
  extendedKeyUsage = serverAuth
  subjectAltName = @alt_names
  [alt_names]
  DNS.1 = *.${PWD##*/}.$(whoami)
  DNS.2 = ${PWD##*/}.$(whoami)
EOF

openssl req \
  -new \
  -newkey rsa:2048 \
  -sha1 \
  -days 3650 \
  -nodes \
  -x509 \
  -keyout ssl.key \
  -out ssl.crt \
  -config openssl.cnf

rm openssl.cnf

現(xiàn)在我們在項目目錄中有兩個文件:ssl.key,用于簽名證書的私鑰和證書本身的ssl.crt妖滔。

到這時候我們已經(jīng)基本做完了配置本地https的所有工作隧哮,不過這里還有一個問題。


problem
problem

我們嘗試通過HTTPS從此域提供的任何內(nèi)容獲得IMMA-LET-YOU-FINISHed通過類似上面的可怕消息铛楣,警告我們所提供的證書不受信任近迁。這個消息因瀏覽器而異,您可能會想繼續(xù)前進簸州,忽略它,但這不是一個好習(xí)慣歧譬,而且很可能導(dǎo)致開發(fā)復(fù)雜性岸浑。

避免https警告,我們需要告訴OS X信任這個證書

由于我們的證書是自簽名的瑰步,因此當(dāng)我們的HTTPS網(wǎng)站使用它時矢洲,我們會收到警告。我們需要使用Keychain Access來告訴OS X缩焦。


open
open

1.在Keychain Access打開證書

open /Applications/Utilities/Keychain\ Access.app ssl.crt

2.點擊 Don't Trust.

3.選擇新導(dǎo)入的證書读虏,它應(yīng)顯示在證書列表的底部,然后單擊[i]按鈕.

4.在彈出窗口中袁滥,單擊信任左側(cè)的?按鈕盖桥,并選擇使用此證書時始終信任.

使用簡單的HTTPS

現(xiàn)在OS X知道我們的自簽名證書是合法的,讓我們啟動一個HTTPS服務(wù)器题翻,以確保一切正常揩徊。你可以使用Apache或Nginx或任何你喜歡的,但在這里我們將使用nodejs:

sleep 1 && open "https://myproject.$(whoami):8443" &
sleep 1 && open "https://subdomain.myproject.$(whoami):8443" &

node <<-EOF
  var https = require("https")
  var fs    = require("fs")

  var options = {
    key: fs.readFileSync("ssl.key"),
    cert: fs.readFileSync("ssl.crt")
  }

  var server = https.createServer(options, function(req, res) {
    res.writeHead(200, {"Content-Type": "text/plain"})
    res.end("It worked!\n")
  })

  server.listen(8443, console.log)
EOF

就像你看到的,頂級域名和子域名都生效塑荒。

success
success

success1
success1

請注意熄赡,這將滿足Chrome和Safari,但由于Firefox不會從OS X繼承相同的Keychain Access齿税,它會告訴你證書是不受信任的彼硫。在這種情況下,單擊我了解風(fēng)險凌箕,然后添加例外...拧篮,然后提示時確認安全異常。

完:)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末陌知,一起剝皮案震驚了整個濱河市他托,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌仆葡,老刑警劉巖赏参,帶你破解...
    沈念sama閱讀 217,185評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異沿盅,居然都是意外死亡把篓,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評論 3 393
  • 文/潘曉璐 我一進店門腰涧,熙熙樓的掌柜王于貴愁眉苦臉地迎上來韧掩,“玉大人,你說我怎么就攤上這事窖铡×迫瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,524評論 0 353
  • 文/不壞的土叔 我叫張陵费彼,是天一觀的道長滑臊。 經(jīng)常有香客問我,道長箍铲,這世上最難降的妖魔是什么雇卷? 我笑而不...
    開封第一講書人閱讀 58,339評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮颠猴,結(jié)果婚禮上关划,老公的妹妹穿的比我還像新娘。我一直安慰自己翘瓮,他們只是感情好贮折,可當(dāng)我...
    茶點故事閱讀 67,387評論 6 391
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著春畔,像睡著了一般脱货。 火紅的嫁衣襯著肌膚如雪岛都。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,287評論 1 301
  • 那天振峻,我揣著相機與錄音臼疫,去河邊找鬼。 笑死扣孟,一個胖子當(dāng)著我的面吹牛烫堤,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播凤价,決...
    沈念sama閱讀 40,130評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸽斟,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了利诺?” 一聲冷哼從身側(cè)響起富蓄,我...
    開封第一講書人閱讀 38,985評論 0 275
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎慢逾,沒想到半個月后立倍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,420評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡侣滩,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,617評論 3 334
  • 正文 我和宋清朗相戀三年口注,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片君珠。...
    茶點故事閱讀 39,779評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡寝志,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出策添,到底是詐尸還是另有隱情材部,我是刑警寧澤,帶...
    沈念sama閱讀 35,477評論 5 345
  • 正文 年R本政府宣布唯竹,位于F島的核電站败富,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏摩窃。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,088評論 3 328
  • 文/蒙蒙 一芬骄、第九天 我趴在偏房一處隱蔽的房頂上張望猾愿。 院中可真熱鬧,春花似錦账阻、人聲如沸蒂秘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,716評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽姻僧。三九已至规丽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間撇贺,已是汗流浹背赌莺。 一陣腳步聲響...
    開封第一講書人閱讀 32,857評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留松嘶,地道東北人艘狭。 一個月前我還...
    沈念sama閱讀 47,876評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像翠订,于是被迫代替她去往敵國和親巢音。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,700評論 2 354

推薦閱讀更多精彩內(nèi)容