环境:
CA服务器:192.168.1.121
WEB服务器: 192.168.1.107
一、在CA服务器上生成自签证书
首先进入CA服务器的CA目录中,如果找不到可以使用find进行查找,如下图
1.生成根私钥
(umask 077;openssl genrsa -out private/cakey.pem 2048)
umask:存放CA私钥文件权限700
genrsa:使用rsa加密算法
-out:指定私钥存放位置
2048:密钥长度
2.2 生成自签证书
2.生成自签证书
openssl req -new -x509 -key private/cakey.pem -out cacert.pem -days 3655
req:生成证书工具
-x509:生成一个自签署证书
-key:指定密钥文件
-out:证书位置
-days:证书期限
Common Name:很重要,部署web服务器时一定对应到web服务器的域名。
填写的信息,在/etc/pki/tls/openssl.cnf可配置默认。
3.创建所需的目录和文件
touch index.txt
echo 01 > serial
目前,一个自签署的CA可以使用了。
二、在WEB服务器端生成证书颁发请求,并发送给CA
1.创建证书保存目录
mkdir /usr/local/nginx/ssl
2.生成私钥
(umask 077;openssl genrsa -out nginx.key)
3.生成证书请求
openssl req -new -key nginx.key -out nginx.csr
Ps:
Common Name:一定要填写正确,就是客户端访问时的域名。
其他和自签署证书一样。
4.发送证书请求给CA服务器
scp httpd.csr 192.168.1.121:/tmp
三、在CA服务器上签署请求证书
1.签名
openssl ca -in /tmp/nginx.csr -out /tmp/nginx.crt -days 3655
3.发送证书给WEB服务器
scp /tmp/nginx.crt 192.168.1.107:/usr/local/nginx/ssl
删除tmp目录下的证书
rm -rf /tmp/nginx.c*
4.Web服务器使用ssl
/usr/local/nginx/conf/vhosts/test.conf 文件配置使用ssl
案例:
server {
listen 80;
listen 443 ssl;
server_name www.mynginx.com;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
location / {
root /var/www/python;
index index.html index.htm;
}
}
个人配置如下:
server {
listen 80;
server_name www.test.com;
#charset koi8-r;
#access_log logs/host.access.log main;
location / {
root html/test;
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;
}
# proxy the PHP scripts to Apache listening on 127.0.0.1:80
#
#location ~ \.php$ {
# proxy_pass http://127.0.0.1;
#}
# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000
#
#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;
#}
# deny access to .htaccess files, if Apache's document root
# concurs with nginx's one
#
#location ~ /\.ht {
# deny all;
#}
}
server {
listen 443 ssl;
server_name www.test.com;
ssl_certificate /usr/local/nginx/ssl/httpd.crt;
ssl_certificate_key /usr/local/nginx/ssl/httpd.key;
location / {
root html/test;
index index.html index.htm;
}
}
然后重启nginx
/usr/local/nginx/sbin/nginx -s reload
nginx结构
5.由于www.ish.com并不是真实的域名,故需要在hosts文件下加入该域名进行本地解析
访问https://www.ihs.com,会出现证书错误,这是由于证书是私有CA颁发的,故需要做如下步骤:
将CA服务器
上的证书cacert.pem
导出到本地,改名为cacert.crt
,点击
退出浏览器,清楚缓存,再重新访问https://www.test.com/
出现了一把锁,证书错误提示也消失了。
参考文档:
https://www.cnblogs.com/zydev/p/5551654.html
https://blog.csdn.net/weixin_30576827/article/details/97426160