1、查看CA服务器环境
# uname -a
2、查看Linux服务器中是否安装OpenSSL
# rpm -q openssl
也可以通过OpenSSL的命令来查看自己版本号
# openssl version
3、修改OpenSSL软件的配置文件
查看OpenSSL软件配置文件的位置
# rpm -ql openssl
/etc/pki/tls/openssl.cnf(这个是OpenSSL的主配置文件)
当前系统中index.txt和serial文件没有创建则手动创建
index.txt:CA服务器颁发的所有证书,可以在这个文件中查询
serial:当前证书的序列号默认是以01开始的
# touch /etc/pki/CA/index.txt
# touch /etc/pki/CA/serial
# echo 01 > /etc/pki/CA/serial
# cat /etc/pki/CA/serial
修改CA签发的机构名称的默认值
4、给CA服务器准备自己的私钥和证书
4.1、CA创建私钥
CA的私钥需要放到/etc/pki/CA/private
CA的私有的权限要为600只能自己查看
# (umake 700; openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048)
4.2、创建一个自签证书
# openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem -out /etc/pki/CA/cacert.pem
5、准备一个nginx服务器
5.1、配置nginx服务器安装前所有需要依赖的软件包(此用软件包是通过yum来安装)
配置一下163的yum源
1. cd /etc/yum.repos.d
2. mv CentOS-Base.repo CentOS-Base.repo.backup
3. wget http://mirrors.163.com/.help/CentOS6-Base-163.repo
4. mv CentOS6-Base-163.repo CentOS-Base.repo
5.yum clean all
安装nginx服务器之前软件包
yum -y install make gcc gcc-c++ ncurses-devel
yum -y install zlib zlib-devel
yum -y install openssl openssl-devel
yum -y install pcre-devel
5.2、编译nginx源代码包
# wget http://nginx.org/download/nginx-1.8.1.tar.gz
# tar xf nginx-1.8.1.tar.gz
# cd nginx-1.8.1
编译nginx
#./configure \
--prefix=/usr/local/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/nginx.pid \
--lock-path=/var/lock/nginx.lock \
--with-http_ssl_module \
--with-http_flv_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--http-client-body-temp-path=/var/tmp/nginx/client/ \
--http-proxy-temp-path=/var/tmp/nginx/proxy/ \
--http-fastcgi-temp-path=/var/tmp/nginx/fcgi/ \
--http-uwsgi-temp-path=/var/tmp/nginx/uwsgi \
--http-scgi-temp-path=/var/tmp/nginx/scgi \
--with-pcre
在编译的nginx的时候需要开启--with-http_ssl_module
# mkdir -p /var/tmp/nginx/client/
#make && make install
5.3、nginx服务器创建私钥
在nginx服务器中创建ssl文件夹,将私钥和证书放到这个目录中
# mkdir -p /usr/local/nginx/ssl
# (umask 077;openssl genrsa -out /usr/local/nginx/ssl/nginx.key 2048)
5.4、nginx服务器创建证书请求
# openssl req -new -key /usr/local/nginx/ssl/nginx.key -out /usr/local/nginx/ssl/nginx.csr
5.5、将nginx服务器上生成证书请求发送到CA服务器上签证
将nginx服务器上的证书请求发送到CA服务器/tmp目录下
# scp /usr/local/nginx/ssl/nginx.csr root@172.16.41.200:/tmp
使用CA服务器来签署nginx服务器证书请求
# openssl ca -in /tmp/nginx.csr -out /tmp/nginx.crt
5.6、将生成的nginx证书拷贝到nginx服务器
# scp /tmp/nginx.crt root@172.16.41.201:/usr/local/nginx/ssl
CA服务器上产生的nginx证书临时文件需要删除保证证书的安全性
# rm -rf /tmp/nginx.c*
5.7、配置nginx服务器SSL
5.7.1、修改nginx的配置文件/usr/local/nginx/nginx.conf
修改红色框标记的地方
server {
# listen 80;
listen 443;
#server_name localhost;
server_name test.org;
ssl on;
ssl_certificate /usr/local/nginx/ssl/nginx.crt;
ssl_certificate_key /usr/local/nginx/ssl/nginx.key;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html;
index index.html index.htm;
}
#error_page 404 /404.html;
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
1、网站用户通过域名访问有可能是http://test.org来访问,可以将http的所有请求跳转到https
server {
listen 80;
server_name test.org;
rewrite ^(.*)$ https://$host$1 permanent;
}
2、网站用户通过域名访问有可能是http://test.org来访问,可以将http的所有请求跳转到https
server {
listen 80;
server_name test.org;
return 301 https://$server_name$request_uri;}
}
5.7.2、检查nginx配置语法是否有错误
# /usr/local/nginx/sbin/nginx -t
5.7.3、如果没有问题那么启动nginx
# /usr/local/nginx/sbin/nginx
5.7.4、查看nginx是否启动
# ps -aux|grep nginx
nginx服务器走的https协议,HTTPS监听在443端口上,那么在Linux服务器上需要打开443端口
# vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 443 -j ACCEPT
重新Linux的防火墙
# /etc/init.d/iptables restart
5.7.5、在window上的浏览器来访问这个服务
需要在window的C:\Windows\System32\drivers\etc\hosts文件配置ip域名映射
添加红色标记的这一行
172.16.41.201 www.test.org
在浏览器中来访问https://www.test.org
5.8、https优化参数
ssl_session_cache shared:SSL:10m; : 设置ssl/tls会话缓存的类型和大小。如果设置了这个参数一般是shared,buildin可能会参数内存碎片,默认是none,和off差不多,停用缓存。如shared:SSL:10m表示我所有的nginx工作进程共享ssl会话缓存,官网介绍说1M可以存放约4000个sessions。详细参考serverfault上的问答ssl_session_cache。
ssl_session_timeout : 客户端可以重用会话缓存中ssl参数的过期时间,内网系统默认5分钟太短了,可以设成30m即30分钟甚至4h。
设置较长的keepalive_timeout也可以减少请求ssl会话协商的开销,但同时得考虑线程的并发数了。