检测并修复OpenSSL Heartbleed漏洞

这个漏洞已经出来好长时间了,自己也一直没有能够引起重视,今天看到有一款扫描检测工具CROWDSTRIKE HEARTBLEED SCANNER可以检查主机是否存在此类漏洞,然后就下载下来试了试,结果本博客直接躺枪。想想还是别拖着了,遂动手修复,其实修复的过程很简单,这里简要说明如下:

由于我使用的是Debian系统,所以这里主要记录的是Debian系统下的OpenSSL升级。

对于图省事的朋友来说,下面的命令可以轻松解决大多数问题:

sudo apt-get update
sudo apt-get upgrade

这两句命令其中第二句将升级系统中所有可更新的软件,但是有过之前惨痛的服务器升级经历后我觉得还是不能轻举妄动,所以再查阅网络后我采取特定升级的方法:

sudo apt-get update
sudo apt-get install openssl libssl1.0.0

继续阅读

浅议Web在线交易系统涉及的安全场景

之前一次课程的作业,我想存着还不如贴出来供大家拍砖。当然很多是一些个人想法,可能叙述得比较乱,不当之处还望批评指正。

现有的简单的在线交易场景如下图所示:

简单在线交易流程示意图

其中涉及到的数据安全和个人隐私主要有:客户账户和密码,信用卡及相关个人信息。

继续阅读

利用OpenSSL创建自签名的SSL证书备忘

之前申请的StartSSL免费一年的证书到期了,考虑到我对SSL一般仅用于博客登录和后台管理上面,所以不打算续申请,自己创建一个就足够了。

本来想使用Windows下的makecert实用工具创建的,结果折腾了很久导入到Linux服务器上,服务器没有正确识别,遂放弃,转而使用OpenSSL,收集了网上的一些材料,通过下面的方法创建成功:

1. SSH登录到服务器,使用下述命令创建根证书的私匙:

openssl genrsa -out ca.key 2048

网上很多是使用了1024,我这里强度加强到了2048。

继续阅读

Nginx配置SSL安全证书避免启动输入Enter PEM pass phrase

之前两篇文章已经很好的介绍了Nginx配置SSL的一些情况,配置好的Nginx每次启动都要输两遍PEM pass phrase,很是不爽,尤其是在服务器重启后,Nginx压根就无法自动启动,必须手动启动并输入那麻烦的PEM pass phrase。如何避免Nginx启动出现Enter PEM pass phrase呢?

求助于万能的搜索引擎后,终于得到了解决的方法:

这种情况可能是在设置私钥key时将密码设置写入了key文件,导致Nginx/Apache等系列服务器在启动时要求Enter PEM pass phrase。我们需要做的是剥离这个密码,利用如下OpenSSL命令生成server.key.unsecure文件:

1
openssl rsa -in server.key -out server.key.unsecure

参考《Can I skip the PEM pass phrase question when I restart the webserver?》

如果server.key.unsecure生成成功,我们就修改Nginx配置,比如像下面这样:

继续阅读

Nginx配置SSL安全证书并解决HTTPS的400 Bad Request问题

前一篇文章《Nginx配置SSL安全证书及解决PEM_read_bio:bad end line error错误》简单介绍了Nginx下SSL安全证书的配置,本来以为这样就算配置完成了,实际不然,首先发现WordPress的AdminSSL无法正常工作,显示有太多的递归转向,也就是说无限循环的跳转,就是无法转到https上,具体错误如下:

Error 310 (net::ERR_TOO_MANY_REDIRECTS): There were too many redirects.

在FireFox火狐下有可能错误是这样的:

Redirection limit for this URL exceeded. Unable to load the requested page. This may be caused by cookies that are blocked.

原先以为是插件问题,想用PHPMyAdmin操作数据库移除插件,利用https的安全方式尝试登录数据库时出现以下错误:

400 Bad Request
The plain HTTP request was sent to HTTPS port

同时地址也变成了类似于http://localhost:443/index.php,也就是表单没有提交到SSL的https上,而是以普通方式提交到443端口,大家都知道443端口是SSL的传输端口,正确的传输方式应该是https协议。

继续阅读

Nginx配置SSL安全证书及解决PEM_read_bio:bad end line error错误

StartSSL上申请了免费一年的证书,本来想配置到nginx里的,把申请到的key和crt文件放到/etc/nginx/certs/目录下,并命名为server.key和server.crt,对于申请的StartCOM Class1证书还需要以下命令,合并证书链:

1
2
3
4
wget http://cert.startssl.com/certs/ca.pem
wget http://cert.startssl.com/certs/sub.class1.server.ca.pem
cat ca.pem sub.class1.server.ca.pem >> ca-certs.crt
cat ca-certs.crt >> server.crt

然后修改Nginx的配置文件nginx.conf如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 下面这段是强制80端口非SSL客户端转向至https安全连接
# 如果希望保留http非安全连接,请去掉这里
server {
  listen 80;
  server_name www.example.com; # 你自己的域名
  rewrite ^(.*) https://$server_name$1 permanent;
}
 
# 这里是SSL的相关配置
server {
  listen 443;
  server_name www.example.com; # 你自己的域名
  root /home/www;
  ssl on;
  ssl_certificate /etc/nginx/certs/server.crt;
  ssl_certificate_key /etc/nginx/certs/server.key;
}

使用下面的命令重启nginx服务

继续阅读