如何创建一个自签名的SSL证书【转】

2017-5-1 寒川 计算机

引言
使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的。也就是说,任何人都可以通过适当的工具拦截或者监听到在网络上传输的数据流。但是有时候,我们需要在网络上传输一些安全性或者私秘性的数据,譬如:包含信用卡及商品信息的电子订单。这个时候,如果仍然使用HTTP协议,势必会面临非常大的风险!相信没有人能接受自己的信用卡号在互联网上裸奔。
HTTPS(超文本传输安全)协议无疑可以有效的解决这一问题。所谓HTTPS,其实就是HTTP和SSL/TLS的组合,用以提供加密通讯及对网络服务器的身份鉴定。HTTPS的主要思想是在不安全的网络上创建一安全信道,防止黑客的窃听和攻击。
SSL(安全套接层)可以用来对Web服务器和客户端之间的数据流进行加密。
SSL利用非对称密码技术进行数据加密。加密过程中使用到两个秘钥:一个公钥和一个与之对应的私钥。使用公钥加密的数据,只能用与之对应的私钥解密;而使用私钥加密的数据,也只能用与之对应的公钥解密。因此,如果在网络上传输的消息或数据流是被服务器的私钥加密的,则只能使用与其对应的公钥解密,从而可以保证客户端与与服务器之间的数据安全。
数字证书(Certificate)
在HTTPS的传输过程中,有一个非常关键的角色——数字证书,那什么是数字证书?又有什么作用呢?
所谓数字证书,是一种用于电脑的身份识别机制。由数字证书颁发机构(CA)对使用私钥创建的签名请求文件做的签名(盖章),表示CA结构对证书持有者的认可。数字证书拥有以下几个优点:
使用数字证书能够提高用户的可信度
数字证书中的公钥,能够与服务端的私钥配对使用,实现数据传输过程中的加密和解密
在证认使用者身份期间,使用者的敏感个人数据并不会被传输至证书持有者的网络系统上
X.509证书包含三个文件:key,csr,crt。
key是服务器上的私钥文件,用于对发送给客户端数据的加密,以及对从客户端接收到数据的解密
csr是证书签名请求文件,用于提交给证书颁发机构(CA)对证书签名
crt是由证书颁发机构(CA)签名后的证书,或者是开发者自签名的证书,包含证书持有人的信息,持有人的公钥,以及签署者的签名等信息
备注:在密码学中,X.509是一个标准,规范了公开秘钥认证、证书吊销列表、授权凭证、凭证路径验证算法等。
创建自签名证书的步骤
注意:以下步骤仅用于配置内部使用或测试需要的SSL证书。
第1步:生成私钥
使用openssl工具生成一个RSA私钥
openssl genrsa -des3 -out server.key 2048
说明:生成rsa私钥,des3算法,2048位强度,server.key是秘钥文件名。
注意:生成私钥,需要提供一个至少4位的密码。
第2步:生成CSR(证书签名请求)
生成私钥之后,便可以创建csr文件了。
此时可以有两种选择。理想情况下,可以将证书发送给证书颁发机构(CA),CA验证过请求者的身份之后,会出具签名证书(很贵)。另外,如果只是内部或者测试需求,也可以使用OpenSSL实现自签名,具体操作如下:
openssl req -new -key server.key -out server.csr

说明:需要依次输入国家,地区,城市,组织,组织单位,Common Name和Email。其中Common Name,可以写自己的名字或者域名,如果要支持https,Common Name应该与域名保持一致,否则会引起浏览器警告。
 
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:Beijing
Locality Name (eg, city) []:Beijing
Organization Name (eg, company) [Internet Widgits Pty Ltd]:joyios
Organizational Unit Name (eg, section) []:info technology
Common Name (e.g. server FQDN or YOUR name) []:demo.joyios.com
Email Address []:liufan@joyios.com
 
第3步:删除私钥中的密码
在第1步创建私钥的过程中,由于必须要指定一个密码。而这个密码会带来一个副作用,那就是在每次Apache启动Web服务器时,都会要求输入密码,这显然非常不方便。要删除私钥中的密码,操作如下:
cp server.key server.key.org
openssl rsa -in server.key.org -out server.key
 
第4步:生成自签名证书
如果你不想花钱让CA签名,或者只是测试SSL的具体实现。那么,现在便可以着手生成一个自签名的证书了。
需要注意的是,在使用自签名的临时证书时,浏览器会提示证书的颁发机构是未知的。
openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt
说明:crt上有证书持有人的信息,持有人的公钥,以及签署者的签名等信息。当用户安装了证书之后,便意味着信任了这份证书,同时拥有了其中的公钥。证书上会说明用途,例如服务器认证,客户端认证,或者签署其他证书。当系统收到一份新的证书的时候,证书会说明,是由谁签署的。如果这个签署者确实可以签署其他证书,并且收到证书上的签名和签署者的公钥可以对上的时候,系统就自动信任新的证书。
第5步:安装私钥和证书
将私钥和证书文件复制到Apache的配置目录下即可,在Mac 10.10系统中,复制到服务器对应目录中即可。

标签: 计算机 linux web apache ssl https

评论(0) 浏览(3701)

Excel求某列值等于指定值对应另一列值的平均值

2017-4-6 寒川

Excel求某列值等于指定值对应另一列值的平均值,如下数据:

1.png

输入公式为:

=AVERAGE(IF($A$2:$A$35=$C2,B$2:B$35))
然后ctrl+shift+enter完成输入,一拉,就出来了。

2.png

最终效果:

3.png

标签: 计算机 office excel

评论(0) 浏览(4555)

centos 搭建git php自动部署。

2016-10-15 寒川 计算机

最近没什么事儿,研究了一下git自动部署,采用webhook用php执行同步git的方式进行自动部署。最开始整了好几小时,用的https连接git仓库,最终解决了,写下来作个简单的总结。

    在centos上搭建git,因centos上用yum install 命令默认装的是1.7.x的git,与最新的相差较大,同时带用户密码的https远程库无法访问,出现类似以下错误:

error: The requested URL returned error: 401 Unauthorized while accessing
因此需要安装最新版的git,安装如下:

1. 需要给 CentOS 下载安装编译工具。

yum groupinstall "Development Tools"
2.安装一些 git 构建或执行时需要的其他依赖。
yum install zlib-devel perl-ExtUtils-MakeMaker asciidoc xmlto openssl-devel
3. 下载 git 最新版本的源代码
$ wget -O git.zip https://github.com/git/git/archive/master.zip

4.解压源文件

unzip git.zip
5、编译安装
cd git-master
autoconf
./configure
make && make install
ln -s /usr/local/bin/git /usr/bin/ #如果在/usr/bin/下存在git,先删除后再执行此句
6、查看git版本,恭喜安装完成
git --version
6、其它:在git安装过程中出现如下错误:
No rule to make target `usr/lib64/per15/CORE/config.h`, needed by `perl.mak`. Stop
请执行
yum install -y perl-devel.x86_64
安装后重新执行第5步进行git的安装。

自动部署:

先cd进web服务器的web目录,再执行(注意用的www用户,www为php运行时的用户):

sudo -u www git init #初始化库
sudo -u www git remote add origin https://user:pass@git.oschina.net/xx/xx.git #添加一个仓库,注意,用户密码中有@时用%40代替。
加一个webhook,文件名为:git.php,内容如下:
<?php
$dir = __DIR__;
$handle = popen('cd '.$dir.' && git fetch --all && git pull origin master','r');
$read = stream_get_contents($handle);
print_r($read);
pclose($handle);
然后在git库中加些git.php为webhook即可。

标签: php linux CentOS git

评论(4) 浏览(5399)

wget递归下载ftp内容,用户或密码中含有@。

2016-6-24 寒川

@符号原本分隔用户信息和主机信息,当用户或密码中含有@时就不能直接wget,得以参数形式。

比如:

wget -r -c ftp://user:pass@host

改为:

wget -r -c ftp://host --ftp-user=user --ftp-password=pass


标签: linux ftp wget

评论(6) 浏览(6789)

Linux/Centos源码安装配置Nginx+PHP+MySQL

2016-5-24 寒川 计算机

一、安装前准备:
1、装源码安装环境(一大堆的依赖)
yum install gcc gcc-c++ ncurses-devel perl
yum -y install zlib zlib-devel openssl openssl-devel pcre-devel #nginx要用
yum install -y libxml2-devel libcurl-devel libjpeg-devel libpng-devel libicu-devel openldap-devel
yum install -y fontconfig fontconfig-devel libXpm* libtool* libxml2 curl curl-devel libpng libjpeg* libsepol-devel glibc gd php-gd libvpx-devel

2、装cmake(mysql编译需要)
wget https://cmake.org/files/v2.8/cmake-2.8.10.2.tar.gz
tar -xzvf cmake-2.8.10.2.tar.gz
cd cmake-2.8.10.2
./bootstrap; make ; make install
cd ~
二、装nginx
1、增加www用户组及用户
groupadd www
useradd -g www www -s /bin/false


2、增加nginx的缓存文件夹

mkdir -p /var/cache/nginx/client_temp


3、下载解压进入目录:
wget http://nginx.org/download/nginx-1.9.15.tar.gz
tar -zxvf nginx-1.9.15.tar.gz
cd nginx-1.9.15

4、编译配置:
./configure \
--prefix=/usr/local/nginx \
--sbin-path=/usr/sbin/nginx \
--conf-path=/usr/local/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--pid-path=/var/run/nginx.pid \
--lock-path=/var/run/nginx.lock \
--http-client-body-temp-path=/var/cache/nginx/client_temp \
--http-proxy-temp-path=/var/cache/nginx/proxy_temp \
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp \
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp \
--http-scgi-temp-path=/var/cache/nginx/scgi_temp \
--user=www \
--group=www \
--with-http_ssl_module \
--with-http_realip_module \
--with-http_addition_module \
--with-http_sub_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_mp4_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_random_index_module \
--with-http_secure_link_module \
--with-http_stub_status_module \
--with-http_auth_request_module \
--with-mail \
--with-mail_ssl_module \
--with-file-aio \
--with-ipv6 \
--with-http_v2_module \
--with-pcre \
--with-cc-opt='-O2 -g -pipe -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector --param=ssp-buffer-size=4 -m64 -mtune=generic'


5、编译安装
make && make install
cd ~
6、启动
nginx -c /usr/local/nginx/nginx.conf
7、停止|重启
nginx -s stop|reload

三、装mysql
1、增加mysql用户组及用户
groupadd mysql
useradd -r -g mysql mysql
2、创建相关目录
mkdir -p /usr/local/mysql
mkdir -p /data/mysqldb
3、下载解压进入目录
wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.30.tar.gz
tar -zxv -f mysql-5.6.30.tar.gz
cd mysql-5.6.30



4、设置编译参数
装mysql-5.6.30版
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \   
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \   
-DDEFAULT_CHARSET=utf8 \   
-DDEFAULT_COLLATION=utf8_general_ci \   
-DWITH_INNOBASE_STORAGE_ENGINE=1 \   
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \   
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \   
-DMYSQL_DATADIR=/data/mysqldb \   
-DMYSQL_TCP_PORT=3306 \   
-DENABLE_DOWNLOADS=1

注:重新运行配置,需要删除CMakeCache.txt文件
rm CMakeCache.txt

5、编译源码
make && make install

6、修改mysql目录所有者和组
6.1、修改mysql安装目录
cd /usr/local/mysql
chown -R mysql:mysql .

6.2、修改mysql数据库文件目录
cd /data/mysqldb
chown -R mysql:mysql .

7、初始化mysql数据库
cd /usr/local/mysql   
scripts/mysql_install_db --user=mysql --datadir=/data/mysqldb

8、复制mysql服务启动配置文件
cp /usr/local/mysql/support-files/my-default.cnf /etc/my.cnf

9、复制mysql服务启动脚本
cp support-files/mysql.server /etc/init.d/mysqld   

10、增加执行权限
chmod 755 /etc/init.d/mysqld 

11、加入开机启动
chkconfig mysqld on 

12、mysql服务加入PATH路径
vim /etc/profile 
文件最后加入  
PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH  
export PATH
esc :wq

13、使配置生效
source /etc/profile  
14、启动
service mysqld start 

15、检查mysql服务是否启动
netstat -tulnp | grep 3306   
mysql -u root -p
密码为空,如果能登陆上,则安装成功。

16、修改MySQL用户root的密码
mysqladmin -u root password 'qiawei88'

四、装php5.6
1、下载解压进入目录
cd ~
wget http://cn2.php.net/distributions/php-5.6.21.tar.gz
tar -zxv -f php-5.6.21.tar.gz
cd php-5.6.21
2、编译配置
./configure \
--prefix=/usr/local/php \
--with-config-file-path=/usr/local/php/etc \
--with-mysql=/usr/local/mysql \
--with-mysqli=/usr/local/mysql/bin/mysql_config \
--with-mysql-sock=/usr/local/mysql/mysql.sock \
--with-pdo-mysql=/usr/local/mysql \
--with-gd --with-png-dir=/usr/local/libpng \
--with-jpeg-dir=/usr/local/jpeg \
--with-freetype-dir=/usr/local/freetype \
--with-xpm-dir=/usr/ \
--with-vpx-dir=/usr/local/libvpx/ \
--with-zlib-dir=/usr/local/zlib \
--with-iconv \
--enable-libxml \
--enable-xml \
--enable-bcmath \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-opcache \
--enable-mbregex \
--enable-fpm \
--enable-mbstring \
--enable-ftp \
--enable-gd-native-ttf \
--with-openssl \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--disable-fileinfo \
--enable-ctype


3、编译安装
make && make install

4、复制php配置文件到安装目录
cp php.ini-production /usr/local/php/etc/php.ini 

5、删除系统自带配置文件
rm -rf /etc/php.ini 

6、添加软链接到 /etc目录
ln -s /usr/local/php/etc/php.ini /etc/php.ini 

7、拷贝模板文件为php-fpm配置文件
cp /usr/local/php/etc/php-fpm.conf.default /usr/local/php/etc/php-fpm.conf 
8、添加软连接到 /etc目录
ln -s /usr/local/php/etc/php-fpm.conf /etc/php-fpm.conf

9、编辑php-fpm.conf 
vi /usr/local/php/etc/php-fpm.conf 

user = www #设置php-fpm运行账号为www
group = www #设置php-fpm运行组为www
pid = run/php-fpm.pid #取消前面的分号
:wq! #保存退出

10、拷贝php-fpm到启动目录
cp sapi/fpm/init.d.php-fpm /etc/rc.d/init.d/php-fpm

11、添加执行权限
chmod +x /etc/rc.d/init.d/php-fpm

12、设置开机启动
chkconfig php-fpm on #

五、配置nginx支持php

1、修改nginx.com的配置
vi /usr/local/nginx/nginx.conf

修改/usr/local/nginx/nginx.conf 配置文件,需做如下修改

user www www; #首行user去掉注释,修改Nginx运行组为www www;
必须与/usr/local/php/etc/php-fpm.conf中的user,group配置相同,否则php运行出错
index index.php index.html index.htm; #添加index.php

#location ~ \.php$ {
#    root           html;
#    fastcgi_pass   127.0.0.1:9000;
#    fastcgi_index  index.php;
#    fastcgi_param  SCRIPT_FILENAME  /scripts$fastcgi_script_name;
#    include        fastcgi_params;
#}
#此段注释改为下面的内容
location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name; # /scripts$fastcgi_script_name
include        fastcgi_params;
}

2、重启nginx
nginx -s reload 

3、启动php-fpm
service php-fpm start 


六、其他:
修改目录权限
chown -R www /usr/local/nginx/html
chgrp -R www /usr/local/nginx/html

标签: php mysql linux nginx lnmp

评论(4) 浏览(5121)

mysql视图学习记录

2016-4-17 寒川 计算机

先说说mysql视图和mysql表的区别,网上copy来的,但说得很准,了解 下。
1.视图是已经编译好的SQL语句,是基于SQL语句的结果集的可视化的表,而表不是。

2.视图没有实际的物理记录,而基本表有。

3.表是内容,视图是窗口。

4.表占用物理空间而视图不占用物理空间,视图只是逻辑概念的存在,表可以即使对它进行修改,但视图只能创建的语句来修改。

5.视图是查看数据表的一种方法,可以查询数据表中某些字段构成的数据,只是一些SQL语句的集合。从安全的角度来看,视图可以防止用户接触数据表,因而用户不知道表的结构。

6.表属于全局模式中的表,是实表;视图属于局部模式的表,是虚表。

7.视图的建立和删除只影响视图本身,不影响对应的基本表。

联系:

视图是在基本表之上建立的表,它的结构和内容都来自基本表,它依据基本表存在而存在。一个视图可以对应一个基本表,也可以对应多个基本表。视图是基本表的抽象和在逻辑意义上建立的新关系。

视图的建,改,删:


--新建
create view myview as select * from mytalbe;

--修改
alter view myview as select * from newtable;
--删除
drop view myview;


标签: mysql mysql视图

评论(0) 浏览(5138)

screen命令让linux关闭ssh后进程继续运行。

2016-4-11 寒川 计算机

如何在关闭ssh连接的情况下,让程序继续运行?

答案就是screen了,不错的软件。

如果服务器没装screen软件,请尝试安装之:


yum install screen


安装完成后就可以用screen了,

#screen
回车后进入Screen子界面,此时putty标题栏会指示处于子界面状态,然后运行你的程序
#应用程序名
然后按下Ctrl+A后抬起,然后按下d键,此时切换回主界面,Putty的窗口标题栏也会指示。
#进行其他的操作,或者exit
 
此时就是断开ssh,程序仍在运行。以后重新ssh连接后,输入
#screen -ls
,查看子界面的代号,然后输入
#screen -r 子界面代号
就可以查看当初你程序运行所在的子界面了。

标签: linux screen ssh

评论(0) 浏览(5772)

Powered by emlog 蜀ICP备12030225号

川公网安备 51042102000001号

sitemap