搭建自己的服務器,過程大致分為3步:
* 購買服務器,配置系統環境
* 獲得域名
* CA認證
1、購買服務器,配置系統環境
經過比較,阿里雲、騰訊雲都比較貴,咱們來找個便宜的。
配置不用太高,可以說是相當便宜了,我買的時候是$19.9(備注:前一段時間訪問不了,要翻牆,現在有可以了,其實我是用來掛VPN的)
現在漲價了,我那最低配置沒有了
點擊order進入購買頁面
嫌貴的話可以買個半年的
支持PayPal和Alipay支付,或者用信用卡(支持美元)
OK,到此服務器到手了
登錄服務器
可以通過 kiwivm控制面板 來管理
當然也可以遠程通過SSH來訪問,默認是支持SSH遠程登錄的
cat /etc/hosts.allow
為了安全,可以限制IP
vi /etc/hosts.allow
ssh root@xxx.xxx.xxx.xxx -p xxx -o PubkeyAuthentication=no
IP和端口在 https://kiwivm.64clouds.com/main.php
有人會問,為什么SSH命令后面要加 -o PubkeyAuthentication=no
用MacOS登錄時,可能會出現
Too many authentication failures for root
配置系統運行環境
2、獲得域名
Freenom 提供免費頂級域名包括:tk,ml,ga,cf,gq
申請流程:
注冊用戶后登陸,然后查詢並選擇一個域名
結算
現在我們已經擁有自己的頂級域名了,可以在 MyDomains 查看
OK,免費域名到手了,但是你能訪問嗎?域名是用來代替難以記憶的IP的,所以要綁定你服務器IP,這就是所謂的域名解析了,可以使用freenom域名解析,也可以用阿里騰訊的域名解析。
freenom域名解析
在上圖你的域名列表中,最右側有個 Manage Domain(管理域名選項),你點擊該選項,就可以進入域名管理界面:
這里使用默認的 DNS 服務器,不做修改
點擊 Manage Freenom DNS 選項,給自己的域名綁定ip 比如:
訪問:http://www.woodtechblog.tk/ 得到的卻是這個
繼續研究,原因是 freenom 的 DNS 解析對國內不太友好,可能要 1小時 才能生效,受不了的可以用國內的 DNS 服務 CloudXNS 或 DNSPod
但是我就是要用 freenom 怎么辦?
使用 CloudXNS 接管 Freenom 的免費域名解析,加快國內生效速度!
偷偷告訴你,我的域名是10分鍾后生效的
錯誤提示語從 找不到IP 變成了 拒絕了我們的請求,說明域名解析成功。
but,這也不是我想要的答案啊(廢話:DNS就是把域名解析成ip,返回訪問ip,直接用ip不也是這個結果嗎)
第一步中,教你了怎么購買服務器,並且配置好了Java、MySQL
創建一個SpringBoot應用,為了方便,這里提供一個可用的SpringBoot簡單應用
因為cnblogs不能上傳jar類型的文件,所以百度雲下載 hello-0.0.1-SNAPSHOT.jar
上傳桌面上的hello-0.0.1-SNAPSHOT.jar文件至遠程服務器xxx.xxx.xxx.xxx的/root/data/目錄中
scp -o PubkeyAuthentication=no -P 22 ~/Desktop/hello-0.0.1-SNAPSHOT.jar root@xxx.xxx.xxx.xxx:/root/data/
后台運行應用
nohup java -jar /root/data/hello-0.0.1-SNAPSHOT.jar &
控制台查看日志
tail -f -n 100 nohup
[root@wood data]# tail -f -n 100 nohup.out
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.1.2.RELEASE)
訪問 http://www.woodtechblog.tk:8080/hello/yourname
到此,其實網站已經搭建好了
but,你看瀏覽器地址欄前面有三個字 ”不安全“,看着不爽怎么辦?
加一個SSL證書,變成HTTPS,接着看CA認證。
3、CA認證
SSL證書,用於加密HTTP協議,也就是HTTPS。隨着淘寶、百度等網站紛紛實現全站Https加密訪問,搜索引擎對於Https更加友好,加上互聯網上越來越多的人重視隱私安全,站長們給網站添加SSL證書似乎成為了一種趨勢。
申請免費的DV證書,為什么是DV而不是OV/EV,看這里 -> DV型、OV型、EV型證書的主要區別
Let's Encrypt 是國外一個公共的免費SSL項目,安裝部署簡單、方便,目前Cpanel、Oneinstack等面板都已經集成了Let's Encrypt一鍵申請安裝,網上也有不少的利用Let's Encrypt開源的特性制作的在線免費SSL證書申請網站,總之Let's Encrypt得到大家的認可。
輸入郵箱地址,生成的證書文件
but,然並卵,因為文檔不齊全,如果是新手又對域名、DNS、SSL、CA、Linux不熟悉,會遇到很多坑的。
現在我來介紹另一個獲取免費SSL的網站 https://www.sslforfree.com/
域名驗證分三步
- 下載文件並上傳至服務器指定目錄,點擊驗證
- 上傳域名驗證文件至宿主機
- 下載免費的free ssl certificate
准備工作
安裝Apache(httpd)
安裝httpd服務
yum install httpd
配置證書需要安裝SSL模塊即mod_ssl:
yum install mod_ssl openssl
service httpd start
service httpd stop
啟動Apache服務器 service httpd start,訪問 http://www.woodtechblog.tk/
OK,接下來,按照下圖步驟操作
在服務器創建目錄
cd /var/www/html
mkdir -p .well-known/acme-challenge
如何將文件上傳到服務器/var/www/html/.well-known/acme-challenge 就不多說了,參考第二部分的命令SSH的 scp 上傳文件命令
上傳完成后重啟一下服務 service httpd restart ,確保兩個地址都可以訪問
如果第二個鏈接 http://woodtechblog.tk/.well-known/acme-challenge/xxx 訪問不了,看下圖
5分鍾之后就可以訪問了 http://woodtechblog.tk/ 和 http://www.woodtechblog.tk/
----------------------------------------------------------------------
強行解釋一波兒(可以跳過)
A記錄:將域名指向一個IPv4地址(例如:10.10.10.10),需要增加A記錄
CNAME記錄:如果將域名指向一個域名,實現與被指向域名相同的訪問效果,需要增加CNAME記錄
MX記錄:建立電子郵箱服務,將指向郵件服務器地址,需要設置MX記錄
NS記錄:域名解析服務器記錄,如果要將子域名指定某個域名服務器來解析,需要設置NS記錄
TXT記錄:可任意填寫(可為空),通常用做SPF記錄(反垃圾郵件)使用
AAAA記錄:將主機名(或域名)指向一個IPv6地址(例如:ff03:0:0:0:0:0:0:c1),需要添加AAAA記錄
SRV記錄:記錄了哪台計算機提供了哪個服務。格式為:服務的名字.協議的類型(例如:_example-server._tcp)
顯性URL:將域名指向一個http(s)協議地址,訪問域名時,自動跳轉至目標地址(例如:將www.net.cn顯性轉發到www.hichina.com后,訪問www.net.cn時,地址欄顯示的地址為:www.hichina.com)。
隱性URL:與顯性URL類似,但隱性轉發會隱藏真實的目標地址(例如:將www.net.cn隱性轉發到www.hichina.com后,訪問www.net.cn時,地址欄顯示的地址仍然為:www.net.cn)。
----------------------------------------------------------------------
這里需要注意的是“I Have My Own CSR” :
- 不勾選 = 網站自動生成“密鑰”+“證書”
- 勾選 = 我們通過Xshell等工具自行生成密鑰,網站只提供證書
----------------------------------------------------------------------
SSL證書的生成與簽名(不勾選可以跳過)
KEY : 私鑰文件,決定ssl安全的基礎
CSR : 證書請求文件,包含公鑰和證書信息
CA : 中級證書頒發機構,一般是可信的第三方,CA證書會驗證公鑰是否被認證
root CA:通過它的私鑰對中級機構提交的CSR進行了簽名
申請ssl證書需要用到openssl,linux系統中默認會安裝,手動安裝openssl:
yum install -y openssl openssl-devel
一.生成私鑰
私鑰是SSL安全性的基礎,使用RSA算法生成,只有證書申請者持有,即使CA也沒有對私鑰的訪問權限,應妥善保管。私鑰長度決定其安全性,2009年768位RSA已被破解,1024位RSA短期內是安全的,但隨着計算機越來越快,已不足以抵御攻擊,為了安全起見應盡量使用2048位RSA,生成2048位私鑰:
openssl genrsa -out server.key 2048
二.生成CSR
證書簽名請求文件(CSR)中包含了公鑰和證書的詳細信息,將CSR發送給CA認證后就會得到數字證書或證書鏈,生成CSR文件:
openssl req -new -sha256 -key server.key -out server.csr
按照提示輸入:國家、省份、城市、組織名、部門、公共名稱、郵件地址等,最后的extra信息不要填寫,個人用戶也可以使用默認或留空,注意‘Common Name’是要使用ssl證書的域名
驗證CSR文件信息:
openssl req -noout -text -in server.csr
確認信息正確就可以提交給CA進行認證,CA會根據你的CSR文件進行簽名,之后頒發數字證書,該數字證書和私鑰就可以部署到服務器了。
下載服務器 server.csr 文件,上傳到 mianfeissl 認證,涉及到常用的SSH命令,傳送門 -> SSH常用命令
scp -o PubkeyAuthentication=no -P 端口 root@服務器IP地址:/root/server.csr ~/Desktop/
呢嗎,原來這里是黏貼文件內容,居然去學習了SSH常用命令
----------------------------------------------------------------------
下載的sslforfree.zip包含以下3個文件
certificate.crt
private.key
ca_bundle.crt
直接上傳sslforfree.zip至服務器/etc/httpd/目錄下並解壓
sch 如何上傳文件? 見上文
解壓文件 unzip sslforfree.zip 如果unzip命令找不到,就 yum install unzip
Apache httpd 2.4 SSL 配置
--------------------------------------------------------------------------------------
配置SSL證書實現HTTPS (Apache httpd 2.4)
配置/etc/httpd/conf.d/ssl.conf
#LoadModule ssl_module modules/mod_ssl.so
#Include conf/extra/httpd-ssl.conf
刪除行首的配置語句注釋符號“#”
打開apache安裝目錄下conf/extra目錄中的httpd-ssl.conf文件
在配置文件中查找以下配置語句
SSLCertificateFile conf/ssl.crt/server.crt 將服務器證書配置到該路徑下
SSLCertificateKeyFile conf/ssl.key/server.key 將服務器證書私鑰配置到該路徑下
#SSLCertificateChainFile conf/ssl.crt/ca.crt 刪除行首的“#”號注釋符,並將中級CA證書 ca.crt(從訂單頁面下載的)配置到該路徑下 保存退出,並重啟Apache。
重啟方式: 進入Apache安裝目錄下的bin目錄,運行如下命令 ./apachectl -k stop ./apachectl -k start 通過https方式訪問您的站點,測試站點證書的安裝配置。
--------------------------------------------------------------------------------------
Apache httpd 2.2 SSL 配置
Apache httpd 2.2 和 Apache httpd 2.4 的配置稍有不同,原理都是一樣的
/etc/httpd/conf/httpd.conf 是httpd服務器配置文件
/etc/httpd/conf.d/ssl.conf 是httpd SSL 配置文件,httpd.conf 引用了ssl.conf
多域名SSL配置時
translate.google.com -> translate-google-com-ssl.conf
mail.google.com -> mail-google-com-ssl.conf
然后在 httpd.conf 中 include 包含進去就行
ssl.conf具體配置如下
-----------------------
LoadModule ssl_module modules/mod_ssl.so
Listen 443
SSLPassPhraseDialog builtin
SSLSessionCache shmcb:/var/cache/mod_ssl/scache(512000)
SSLSessionCacheTimeout 300
SSLMutex default
SSLRandomSeed startup file:/dev/urandom 256
SSLRandomSeed connect builtin
SSLCryptoDevice builtin
<VirtualHost _default_:443>
DocumentRoot "/var/www/html"
ServerName woodtechblog.tk:443
ErrorLog logs/ssl_error_log
TransferLog logs/ssl_access_log
LogLevel warn
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite DEFAULT:!EXP:!SSLv2:!DES:!IDEA:!SEED:+3DES
SSLCertificateFile /etc/httpd/certificate.crt
SSLCertificateKeyFile /etc/httpd/private.key
SSLCACertificateFile /etc/httpd/ca_bundle.crt
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
<Directory "/var/www/cgi-bin">
SSLOptions +StdEnvVars
</Directory>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
CustomLog logs/ssl_request_log \
"%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"
</VirtualHost>
-----------------------
https://www.cnblogs.com/wood-life/
------------------------------------------------------
思考題:https://www.woodtechblog.tk:8080/hello/小伍 訪問不了?
------------------------------------------------------
轉載請注明出處,謝謝!