nginx 配置自签名的ssl证书
最近要搭一个https的测试环境,使用nginx做反向代理。
网上找过不少资料,但过程不是很完整,吃了不少亏,故把自己的操作过程总结下来。如果你刚好遇到这个问题,希望对你有帮助!
********************************分割线*************************
使用java自带jdk生成ssl自签名证书(以生成uat环境的ssl证书为例)
1、打开cmd命令窗口,指定使用RSA算法生成一个颁发证书的机构,
执行命令:keytool -genkey -alias uat -keypass password -keyalg RSA -keysize 1024 -validity 365 -keystore D:/UAT/KEY/uat.keystore -storepass password


2、使用export命令导出cer证书:
执行命令:keytool -export -alias uat -keystore D:/UAT/KEY/uat.keystore -storepass password -rfc -file D:/UAT/KEY/uat.cer


3、因为keytool不提供命令导出私钥,所以需要编写java类导出key,测试类如下:
package test; import java.io.FileInputStream;
import java.security.KeyStore;
import java.security.PrivateKey; import sun.misc.BASE64Encoder; public class SslKey { public static KeyStore getKeyStore(String keyStorePath, String password) throws Exception {
FileInputStream is = new FileInputStream(keyStorePath);
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(is, password.toCharArray());
is.close();
return ks;
} public static PrivateKey getPrivateKey() {
try {
BASE64Encoder encoder = new BASE64Encoder();
KeyStore ks = getKeyStore("D:/UAT/key/uat.keystore", "password");
PrivateKey key = (PrivateKey) ks.getKey("uat", "password".toCharArray());
String encoded = encoder.encode(key.getEncoded());
System.out.println("-----BEGIN RSA PRIVATE KEY-----");
System.out.println(encoded);
System.out.println("-----END RSA PRIVATE KEY-----");
return key;
} catch (Exception e) {
return null;
}
} public static void main(String[] args) {
getPrivateKey();
} }
算出key值如下:
-----BEGIN RSA PRIVATE KEY-----
MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBAI4MMsT9ZUQg2ADjy2D3ZLxCz3QJ
mWX6TNzn66tsTCE1Dn+5WFwfL3tUSgcT+YHW6v6XG2Ph0d+4BHR9pvWtkcOi5YOt3MIcgwcWooez
5IyCTbGEYEpjtA6h2HVJs0fYZ2tf80KM4oxw3tW5sNXRNwtJ6rNiJ0lNbNgS4iWkXpyNAgMBAAEC
gYEAgFw5jJVG6zeaucMfR7KHTzA4cy0xd1umFYFmD3Q/n0ponbaJSEXODG5wrtC4CUKC/CjkUXAA
zV9mdzYMp7l/G6Tg2d47j7wRMfPSFi/Z/Q3p5bjV+hf2FOREuGB3L7NvaxpGXn+/Jw1eU6XGYHFT
t4BNeNgH/UNxfpGOqRAAMCkCQQDZ84LI2IQT2yzGVYsJbm1sDkZxVINSMlVF2AjJV0F1VHfCzogX
S979jG+ohQ18kjapC8ae9BG03dbhcMPff3irAkEApth4ZVE65angMCyTQJjoINfJeIKYsc0Og/H7
sM0+rvM/GTUvmIjx9GRrh9IlThBihp56EM55lsh0Go2ZEi6vpwJABCZ+9xQob7hcweofG67eppAf
B0l0trv+o7XZdPwUYweYwDzumoL3XBywg6UE/LpMECwJPD2pmKggz2o2UKs8wQJAXKkKLFKxoAz5
KigHW6/P8zWEeb4l6VEVx6ejfaxvLKCBIZHNLiyYG3+NzK+j8jfdUCBBcIYLNvd6q6iKI3P0LwJB
AKkB/YAmvhS219fo2nDP4ds/ICe2xsatum2Yc29nihKQ2p/5DxhLfBaSfoeb21+wpX9b5BrNxM/w
BKoG0YUvsjQ=
-----END RSA PRIVATE KEY-----
新建一个uat.key命名的文件,把key的内容粘贴到这个文件夹里面:


4、到这一步,已经可以将cer证书(若需要crt证书,可以直接把cer证书文件的后缀改为crt即可)配置到nginx中使用,但是使用此时的key需要每次访问的时候输入一次密码,相当麻烦。所以最好对key文件再ssl免密码操作一次。步骤如下:
在windows上安装openssl转换工具:
Win64OpenSSL-1_0_2c.exe
vcredist_x64.exe
然后再将openss的bin目录配置到系统环境变量里:

执行命令:rsa -in D:\UAT\key\uat.key -out D:\UAT\key\uat.key.unsecure


5、把证书文件拷贝到测试环境,并配置nginx的config文件(我事先把uat.cer文件改名为uat.crt),如:
server {
listen 443;
server_name www.uat.com;
ssl on;
ssl_certificate D:/UAT/KEY/uat.crt;
ssl_certificate_key D:/UAT/KEY/uat.key.unsecure;
#charset koi8-r;
access_log logs/www.uat.com.log main;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location / {
proxy_pass http://www.uat.com;
}
error_page 500 502 503 504 /error.html;
location = /error.html {
root html;
}
}
重启nginx即可实现https访问。因为是自签名的证书,所以浏览器访问时需要先手动信任一下。
各步骤命令汇总:
keytool -genkey -alias uat -keypass password -keyalg RSA -keysize 1024 -validity 365 -keystore D:/UAT/KEY/uat.keystore -storepass password keytool -export -alias uat -keystore D:/UAT/KEY/uat.keystore -storepass password -rfc -file D:/UAT/KEY/uat.cer --使用SslKey.java转换key OpenSSL> rsa -in D:\UAT\key\uat.key -out D:\UAT\key\uat.key.unsecure
nginx 配置自签名的ssl证书的更多相关文章
- Nginx配置自签名的SSL证书(转载)
要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择.HTTPS其实就是HTTP over SSL,也就是让HTTP连接建立在SSL安全连接之上. SSL使用证书来创建安全连接.有两种验证模 ...
- 给Nginx配置一个自签名的SSL证书
转自廖雪峰的官方网站http://www.liaoxuefeng.com/ 要保证Web浏览器到服务器的安全连接,HTTPS几乎是唯一选择.HTTPS其实就是HTTP over SSL,也就是让HTT ...
- Nginx配置一个自签名的SSL证书
http://www.liaoxuefeng.com/article/0014189023237367e8d42829de24b6eaf893ca47df4fb5e000 要保证Web浏览器到服务器的 ...
- windows Apache 环境下配置支持HTTPS的SSL证书
windows Apache 环境下配置支持HTTPS的SSL证书 1.准备工作 1)在设置Apache + SSL之前, 需要做: 安装Apache, 下载安装Apache时请下载带有SSL版本的A ...
- Apache2配置腾讯云SSL证书
首先去腾讯云申请免费的SSL证书,下载下来解压后里面有一个Apache文件夹,里面有三个文件,接下来会用到. 上传证书 将上一步的三个文件上传到/etc/ssl里 启用SSL模块 启用a2enmod ...
- centos 6.9 +nginx 配置GIT HTTPS服务器(证书采用自签名)
第一部分原通过SSH访问的GIT服务器迁移 1.把原服务器GIT资源库目录完成复制至新的服务器 2.安装GIT服务器 新的服务器 创建用户 useradd git password git 下载GIT ...
- nginx+腾讯云免费ssl证书+阿里云ECS实现Https配置
1. 申请SSL证书: 首先我们需要到腾讯云那边申请一个ssl证书,对于个人博客类型的,建议采用免费版本,土豪除外 申请地址:https://console.cloud.tencent.com/ssl ...
- nginx配置自签名https
nginx配置https是需要CA颁发证书的,为了测试方便,我们可以使用自签名证书 1.如何生成自签名证书 1.1:我们需要为服务端和客户端准备私钥和公钥: //生成服务器端私钥 openssl ge ...
- iOS适配HTTPS,创建一个自签名的SSL证书(x509)具体步骤
引言(创建生成的证书只能用于测试使用.如果想使用自签名证书就只能以自己为 CA机构颁发证书,进行双向认证才能使用) 使用HTTP(超文本传输)协议访问互联网上的数据是没有经过加密的.也就是说,任何人都 ...
随机推荐
- .bash_profile和.bashrc的区别
参考资料: http://blog.163.com/wang_hai_fei/blog/static/309020312008728333912/
- NYOJ 214 最长上升子序列nlogn
普通的思路是O(n2)的复杂度,这个题的数据量太大,超时,这时候就得用nlogn的复杂度的算法来做,这个算法的主要思想是只保存有效的序列,即最大递增子序列,然后最后得到数组的长度就是最大子序列.比如序 ...
- Shell中逻辑判断
[ 条件1 -a 条件2 ] 当1和2都真时才为真 [ 条件1 -o 条件2 ] 当1和2其中一个为真即为真 [ ! 条件 ] 取反 && 与 ...
- JavaScript 类、构造函数、原型
类.构造函数.原型 :本质均为函数 利用的原理是:词法作用域,调用对象及作用域链 闭包 属性查找方式 设计和new运算符一起使用的函数叫做构造函数. 构造函数的工作:初始化一个新创建的对象 ...
- js中的|| 与 &&
a && b : 将a, b转换为Boolean类型, 再执行逻辑与, true返回b, false返回aa || b : 将a, b转换为Boolean类型, 再执行逻辑或, tru ...
- PLSQL developer连接不上64位Oracle的解决方法
PLSQL developer连接不上64位Oracle的解决方法 64位下装Oracle 11g 64位,PLSQL Developer使用出现问题. 问题描述: 登录对话框中,数据库下拉框为空: ...
- Ubuntu 10.04启动进入命令行模式
进终端先 运行 sudo gedit /etc/default/grub 找到 GRUB_CMDLINE_LINUX_DEFAULT=”quiet splash” 改为 GRUB_CMDLINE ...
- PHPCMS v9修改栏目或者单页没有权限
问题: 普通管理员没有权限修改栏目,只有超级管理员才有权限修改,凡是非超级管理员,设置栏目权限后只能添加栏目,不能对栏目进行修改和删除操作,提示您没有权限操作该项这使系统的一个BUG. 一.对于普 ...
- MVC + LigerUI 做后台管理还真是清爽
LigerUI是基于Jquery,轻量级UI框架.具体可以看官方演示 http://www.ligerui.com/ 我的简单后台 模拟Winodw桌面效果,挺不错呢.最喜欢的还是他的,下拉列表绑定G ...
- Sicily shortest path in unweighted graph
题目介绍: 输入一个无向图,指定一个顶点s开始bfs遍历,求出s到图中每个点的最短距离. 如果不存在s到t的路径,则记s到t的距离为-1. Input 输入的第一行包含两个整数n和m,n是图的顶点 ...