通過(guò)Nginx用密碼保護(hù)以太坊JSON-RPC API

本文面向以太坊智能合約應(yīng)用程序開(kāi)發(fā)人員,并討論如何在密碼保護(hù)后趾撵,安全地運(yùn)行你的以太坊節(jié)點(diǎn),以便通過(guò)Internet進(jìn)行安全輸出。

Go Ethereum(geth)是以太坊節(jié)點(diǎn)最受歡迎的軟件湃密。其他流行的以太坊實(shí)現(xiàn)是Parity和cpp-ethereum等。分布式應(yīng)用程序(Dapps)是JavaScript編碼的網(wǎng)頁(yè)四敞,通過(guò)JSON-RPC API協(xié)議連接到任何這些以太坊節(jié)點(diǎn)軟件泛源,該協(xié)議是在HTTP協(xié)議之上自行運(yùn)行的。

geth或沒(méi)有節(jié)點(diǎn)軟件本身不提供安全網(wǎng)絡(luò)忿危。將Ethereum JSON-RPC API暴露給公共Internet是不安全的达箍,因?yàn)榧词菇盟接蠥PI,這也會(huì)為瑣碎的拒絕服務(wù)攻擊打開(kāi)一扇門(mén)铺厨。節(jié)點(diǎn)軟件本身不需要提供安全的網(wǎng)絡(luò)原語(yǔ)缎玫,因?yàn)檫@種內(nèi)置功能會(huì)增加復(fù)雜性并為關(guān)鍵區(qū)塊鏈節(jié)點(diǎn)軟件增加攻擊面。

Dapps本身是純客戶端HTML和JavaScript解滓,不需要任何服務(wù)器赃磨,它們可以在任何Web瀏覽器中運(yùn)行,包括移動(dòng)和嵌入式瀏覽器洼裤,如Mist錢(qián)包內(nèi)的一個(gè)邻辉。

使用Nginx代理作為HTTP基本身份驗(yàn)證器

有幾種方法可以保護(hù)對(duì)HTTP API的訪問(wèn)。最常見(jiàn)的方法包括HTTP頭中的API令牌腮鞍,基于cookie的身份驗(yàn)證或HTTP基本訪問(wèn)身份驗(yàn)證值骇。

HTTP基本身份驗(yàn)證是HTTP協(xié)議的一個(gè)非常古老的功能,其中Web瀏覽器打開(kāi)一個(gè)本機(jī)彈出對(duì)話框移国,詢問(wèn)用戶名和密碼吱瘩。它本質(zhì)上的保護(hù)是有限的,但非常容易實(shí)現(xiàn)迹缀,非常適合需要為有限的互聯(lián)網(wǎng)受眾暴露私有Dapp的用例搅裙。這些用例包括顯示Dapp演示,私有和許可的區(qū)塊鏈應(yīng)用程序或?qū)⒁蕴还δ茏鳛檐浖捶?wù)解決方案的一部分裹芝。

Nginx

Nginx是最受歡迎的開(kāi)源Web服務(wù)器應(yīng)用程序之一部逮。我們將展示如何設(shè)置Nginx Web服務(wù)器,以便它使用HTTP Basic Auth私下為你的Dapp(HTML文件)和geth JSON-RPC API提供服務(wù)嫂易。

我們假設(shè)Ubuntu 14.04更新的Linux服務(wù)器兄朋。文件位置可能取決于使用的Linux發(fā)行版。

安裝Nginx

在Ubuntu Linux 14.04或更高版本上安裝Nginx:

sudo apt install nginx apache2-utils

配置Nginx

我們假設(shè)我們編輯默認(rèn)的網(wǎng)站配置文件/etc/nginx/sites-enabled/default。我們使用proxy_pass指令與在localhost:8545中運(yùn)行的geth進(jìn)行通信:

server {
    listen 80 default_server;
    listen [::]:80 default_server ipv6only=on;
    server_name demo.example.com;


    # Geth proxy that password protects the public Internet endpoint
    location /eth {
        auth_basic "Restricted access to this site";
        auth_basic_user_file /etc/nginx/protected.htpasswd;

        # Proxy to geth note that is bind to localhost port                        
        proxy_pass http://localhost:8545;            
    }

    # Server DApp static files
    location / {
        root /usr/share/nginx/html;
        index index.html

        auth_basic "Restricted access to this site";
        auth_basic_user_file /etc/nginx/protected.htpasswd;
    }       
}

使用密碼創(chuàng)建HTTP Basic Auth用戶演示:

sudo htpasswd -c /etc/nginx/protected.htpasswd demo

配置geth

開(kāi)始使用geth守護(hù)進(jìn)程的最簡(jiǎn)單方法是在UNIX screen中運(yùn)行它:

screen

geth  # Your command line parameters here

退出screen 使用CTRL+A, D颅和。

請(qǐng)參閱geth private testnet說(shuō)明

配置Dapp

在你的Dapp中傅事,使web3.js使用/eth端點(diǎn):

  function getRPCURL() {

    // ES2016 
    if(window.location.href.includes("demo.nordledger.com")) {      
      // Password protected geth deployment
      return "http://demo.nordledger.com/eth"

    } else {
        // Localhost development
      return "http://localhost:8545";  
    }
  }

  // ...

  web3.setProvider(new web3.providers.HttpProvider(getRPCURL()));

部署Dapp

將DApp文件復(fù)制到服務(wù)器上的/usr/share/nginx/html。這包括index.html以及相關(guān)的JavaScript和CSS資源峡扩。

Bonus - 部署shell腳本示例:

#!/bin/bash
#
# A simple static HTML + JS deployment script that handles Nginx www-data user correclty.
# Works e.g. Ubuntu Linux Azure and Amazon EC2 Ubuntu server out of the box.
#

set -e
set -u

# The remote server we are copying the files using ssh + public key authentication.
# Specify this in .ssh/config
REMOTE="nordledger-demo"

# Build dist folder using webpack
npm run build

# Copy local dist folder to the remote server Nginx folder over sudoed
# Assum the default user specified in .ssh/config has passwordless sudo
# https://crashingdaily.wordpress.com/2007/06/29/rsync-and-sudo-over-ssh/
rsync -a -e "ssh" --rsync-path="sudo rsync" dist/* --chown www-data:www-data $REMOTE:/usr/share/nginx/html/

重啟Nginx

為Nginx做一次硬重啟:

service nginx stop service nginx start

測(cè)試并迭代

訪問(wèn)網(wǎng)站蹭越,看看您的Dapp是否連接到代理的Geth。

檢查/var/log/nginx/error.log以獲取詳細(xì)信息教届。

如果從/eth端點(diǎn)獲得502 Bad Gateway响鹃,請(qǐng)確保geth正在作為服務(wù)器上的后臺(tái)進(jìn)程正常運(yùn)行。

======================================================================

分享一些以太坊案训、EOS买置、比特幣等區(qū)塊鏈相關(guān)的交互式在線編程實(shí)戰(zhàn)教程:

  • java以太坊開(kāi)發(fā)教程,主要是針對(duì)java和android程序員進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的web3j詳解强霎。
  • python以太坊忿项,主要是針對(duì)python工程師使用web3.py進(jìn)行區(qū)塊鏈以太坊開(kāi)發(fā)的詳解。
  • php以太坊城舞,主要是介紹使用php進(jìn)行智能合約開(kāi)發(fā)交互轩触,進(jìn)行賬號(hào)創(chuàng)建、交易家夺、轉(zhuǎn)賬脱柱、代幣開(kāi)發(fā)以及過(guò)濾器和交易等內(nèi)容。
  • 以太坊入門(mén)教程秦踪,主要介紹智能合約與dapp應(yīng)用開(kāi)發(fā)褐捻,適合入門(mén)。
  • 以太坊開(kāi)發(fā)進(jìn)階教程椅邓,主要是介紹使用node.js柠逞、mongodb、區(qū)塊鏈景馁、ipfs實(shí)現(xiàn)去中心化電商DApp實(shí)戰(zhàn)板壮,適合進(jìn)階。
  • C#以太坊合住,主要講解如何使用C#開(kāi)發(fā)基于.Net的以太坊應(yīng)用绰精,包括賬戶管理、狀態(tài)與交易透葛、智能合約開(kāi)發(fā)與交互笨使、過(guò)濾器和交易等。
  • EOS教程僚害,本課程幫助你快速入門(mén)EOS區(qū)塊鏈去中心化應(yīng)用的開(kāi)發(fā)硫椰,內(nèi)容涵蓋EOS工具鏈、賬戶與錢(qián)包、發(fā)行代幣靶草、智能合約開(kāi)發(fā)與部署蹄胰、使用代碼與智能合約交互等核心知識(shí)點(diǎn),最后綜合運(yùn)用各知識(shí)點(diǎn)完成一個(gè)便簽DApp的開(kāi)發(fā)奕翔。
  • java比特幣開(kāi)發(fā)教程裕寨,本課程面向初學(xué)者,內(nèi)容即涵蓋比特幣的核心概念派继,例如區(qū)塊鏈存儲(chǔ)宾袜、去中心化共識(shí)機(jī)制、密鑰與腳本互艾、交易與UTXO等试和,同時(shí)也詳細(xì)講解如何在Java代碼中集成比特幣支持功能讯泣,例如創(chuàng)建地址纫普、管理錢(qián)包、構(gòu)造裸交易等好渠,是Java工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程昨稼。
  • php比特幣開(kāi)發(fā)教程,本課程面向初學(xué)者拳锚,內(nèi)容即涵蓋比特幣的核心概念假栓,例如區(qū)塊鏈存儲(chǔ)、去中心化共識(shí)機(jī)制霍掺、密鑰與腳本匾荆、交易與UTXO等,同時(shí)也詳細(xì)講解如何在Php代碼中集成比特幣支持功能杆烁,例如創(chuàng)建地址牙丽、管理錢(qián)包、構(gòu)造裸交易等兔魂,是Php工程師不可多得的比特幣開(kāi)發(fā)學(xué)習(xí)課程烤芦。

匯智網(wǎng)原創(chuàng)翻譯,轉(zhuǎn)載請(qǐng)標(biāo)明出處析校。這里是原文

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末构罗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子智玻,更是在濱河造成了極大的恐慌遂唧,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,204評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吊奢,死亡現(xiàn)場(chǎng)離奇詭異盖彭,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)谬泌,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)滔韵,“玉大人,你說(shuō)我怎么就攤上這事掌实∨泸撸” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,548評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵贱鼻,是天一觀的道長(zhǎng)宴卖。 經(jīng)常有香客問(wèn)我,道長(zhǎng)邻悬,這世上最難降的妖魔是什么症昏? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,657評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮父丰,結(jié)果婚禮上肝谭,老公的妹妹穿的比我還像新娘。我一直安慰自己蛾扇,他們只是感情好攘烛,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著镀首,像睡著了一般坟漱。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上更哄,一...
    開(kāi)封第一講書(shū)人閱讀 51,554評(píng)論 1 305
  • 那天芋齿,我揣著相機(jī)與錄音,去河邊找鬼成翩。 笑死觅捆,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的捕传。 我是一名探鬼主播惠拭,決...
    沈念sama閱讀 40,302評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼庸论!你這毒婦竟也來(lái)了职辅?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,216評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤聂示,失蹤者是張志新(化名)和其女友劉穎域携,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體鱼喉,經(jīng)...
    沈念sama閱讀 45,661評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡秀鞭,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評(píng)論 3 336
  • 正文 我和宋清朗相戀三年趋观,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锋边。...
    茶點(diǎn)故事閱讀 39,977評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡皱坛,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出豆巨,到底是詐尸還是另有隱情剩辟,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評(píng)論 5 347
  • 正文 年R本政府宣布往扔,位于F島的核電站贩猎,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏萍膛。R本人自食惡果不足惜吭服,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蝗罗。 院中可真熱鬧艇棕,春花似錦、人聲如沸绿饵。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,898評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拟赊。三九已至,卻和暖如春粹淋,著一層夾襖步出監(jiān)牢的瞬間吸祟,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,019評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工桃移, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留屋匕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,138評(píng)論 3 370
  • 正文 我出身青樓借杰,卻偏偏與公主長(zhǎng)得像过吻,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蔗衡,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評(píng)論 2 355

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