新手一步步搭建自己的网站(服务器->域名->CA认证) SSL证书,用于加密HTTP协议,也就是HTTPS。随着淘宝、百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书似乎成为了一种趋势。
搭建自己的服务器,过程大致分为3步:
* 购买服务器,配置系统环境
* 获得域名
* CA认证
1、购买服务器,配置系统环境
经过比较,阿里云、腾讯云都比较贵,咱们来找个便宜的。
配置不用太高,可以说是相当便宜了,我买的时候是$19.9(备注:前一段时间访问不了,要FQ,现在有可以了,其实我是用来挂VPN的)
现在涨价了,我那最低配置没有了
点击order进入购买页面
嫌贵的话可以买个半年的
支持PayPal和Alipay支付,或者用信用卡(支持美元)
OK,到此服务器到手了
登录服务器
可以通过 kiwivm控制面板 来管理
当然也可以远程通过SSH来访问,默认是支持SSH远程登录的
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
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登录时,可能会出现
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
Too many authentication failures for root
配置系统运行环境
2、获得域名
Freenom 提供免费顶级域名包括:tk,ml,ga,cf,gq
申请流程:
注册用户后登陆,然后查询并选择一个域名
结算
现在我们已经拥有自己的顶级域名了,可以在 MyDomains 查看
OK,免费域名到手了,但是你能访问吗?域名是用来代替难以记忆的IP的,所以要绑定你服务器IP,这就是所谓的域名解析了,可以使用freenom域名解析,也可以用阿里腾讯的域名解析。
—————
freenom现在不允许中国用户注册域名,中国的域名都需要备案的,那么如何申请免费域名呢?
注册freenom邮箱账号时,地址填写美国地区就可以了(邮箱可以是QQ等任意邮箱,地址要用美国、英国等)
—————
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
上面链接已失效,使用下面的:
链接: https://pan.baidu.com/s/15ru8DowMs–iLvGtJr10Ew 提取码: i9qi
上传桌面上的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认证
申请免费的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常用命令
———————————————————————-
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
span.s2 { font-variant-ligatures: no-common-ligatures; color: rgba(76, 122, 255, 1) }
span.s3 { font-variant-ligatures: no-common-ligatures; color: rgba(30, 255, 255, 1) }
下载的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/小伍 访问不了?
——————————————————
转载请注明出处,谢谢!
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
p.p2 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4); min-height: 13px }
span.s1 { font-variant-ligatures: no-common-ligatures }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
span.s2 { font-variant-ligatures: no-common-ligatures; color: rgba(76, 122, 255, 1) }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
span.s1 { font-variant-ligatures: no-common-ligatures }
p.p1 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4) }
p.p2 { margin: 0; font: 11px Menlo; color: rgba(0, 0, 0, 1); background-color: rgba(255, 255, 255, 0.4); min-height: 13px }
span.s1 { font-variant-ligatures: no-common-ligatures }