新手一步步搭建自己的网站(服务器->域名->CA认证) SSL证书,用于加密HTTP协议,也就是HTTPS。随着淘宝、百度等网站纷纷实现全站Https加密访问,搜索引擎对于Https更加友好,加上互联网上越来越多的人重视隐私安全,站长们给网站添加SSL证书似乎成为了一种趋势。

时间:2024-02-16 08:39:01

更多内容参见个人技术博客,无广告欢迎关注

 

搭建自己的服务器,过程大致分为3步:

* 购买服务器,配置系统环境

* 获得域名

* CA认证

 

 

1、购买服务器,配置系统环境

经过比较,阿里云、腾讯云都比较贵,咱们来找个便宜的。

Bandwagon主机标志

 配置不用太高,可以说是相当便宜了,我买的时候是$19.9(备注:前一段时间访问不了,要FQ,现在有可以了,其实我是用来挂VPN的)

现在涨价了,我那最低配置没有了

点击order进入购买页面

 

嫌贵的话可以买个半年的

支持PayPal和Alipay支付,或者用信用卡(支持美元)

 

OK,到此服务器到手了

 登录服务器

可以通过 kiwivm控制面板 来管理

当然也可以远程通过SSH来访问,默认是支持SSH远程登录的

cat /etc/hosts.allow

为了安全,可以限制IP

vi /etc/hosts.allow

#下面为允许通过制定ip访问服务器
sshd:xxx.xxx.xxx.xxx:allow
sshd:xxx.xxx.xxx.xxx:allow
sshd:172.16.0.0/255.255.0.0:allow
sshd:192.168.0.0/255.255.0.0:allow
 
SSH登录控制台命令:

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

 

配置系统运行环境

配置Java

配置MySQL

 

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)。

 

主机记录就是域名前缀,常见用法有:
www:解析后的域名为www.aliyun.com。
@:直接解析主域名 aliyun.com。
*:泛解析,匹配其他所有域名 *.aliyun.com。
mail:将域名解析为mail.aliyun.com,通常用于解析邮箱服务器。
二级域名:如:abc.aliyun.com,填写abc。
手机网站:如:m.aliyun.com,填写m。
显性URL:不支持泛解析(泛解析:将所有子域名解析到同一地址)

---------------------------------------------------------------------- 

 

这里需要注意的是“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/小伍 访问不了?

Apache(httpd)实现反向代理

------------------------------------------------------

 

 

转载请注明出处,谢谢!