本地自签https证书

由于开发过程中经常遇到使用https进行测试的一个环境,而如果想要一个权威认证的ssl证书又不便宜,而且需要自己拥有域名和服务器、DNS认证等等,如果只是单纯的想要一个https环境作为测试,那么自己生成一个证书就够了,虽然浏览器会有警告,但这不重要,直接点击相信即可。

本地自签https证书_第1张图片

由CA签署的证书为服务器提供重要的功能:

  • 浏览器会自动识别证书并且在不提示用户的情况下允许创建一个安全连接。
  • 当一个CA生成一个签署过的证书,它为提供网页给浏览器的组织提供身份担保。
  • 多数支持ssl的web服务器都有一个CA列表,它们的证书会被自动接受。当一个浏览器遇到一个其授权CA并不在列表中的证书,浏览器将询问用户是否接受或拒绝连接。



环境

由于我们生成的证书需要用到opensslnginx,请提前准备好。


开始

①建立目录certs,专门用来存放证书和私钥

mkdir certs

下图是我们最后完成的时候在这个目录下产生的文件

在这里插入图片描述



②创建配置文件用于生成证书

vim localhost.conf

配置文件内容如下,可自作修改
[ req ]

default_bits        = 2048							# RSA的2048是公认较比较安全的key长度
default_keyfile     = server-key.pem
distinguished_name  = subject
req_extensions      = req_ext
x509_extensions     = x509_ext
string_mask         = utf8only

[ subject ]

countryName                 = Country Name (2 letter code)
countryName_default         = US

stateOrProvinceName         = State or Province Name (full name)
stateOrProvinceName_default = NY

localityName                = Locality Name (eg, city)
localityName_default        = New York

organizationName            = Organization Name (eg, company)
organizationName_default    = Example, LLC

commonName                  = Common Name (e.g. server FQDN or YOUR name)
commonName_default          = Example Company

emailAddress                = Email Address
emailAddress_default        = [email protected]

[ x509_ext ]

subjectKeyIdentifier   = hash
authorityKeyIdentifier = keyid,issuer

basicConstraints       = CA:FALSE
keyUsage               = digitalSignature, keyEncipherment
subjectAltName         = @alternate_names
nsComment              = "OpenSSL Generated Certificate"

[ req_ext ]

subjectKeyIdentifier = hash

basicConstraints     = CA:FALSE
keyUsage             = digitalSignature, keyEncipherment
subjectAltName       = @alternate_names
nsComment            = "OpenSSL Generated Certificate"

[ alternate_names ]

DNS.1       = 192.168.XXX.XXX			# 注意这里一般改为自己本地的ip或者域名



③生成SSL证书

创建自签名密钥和证书对

openssl req -config localhost.conf -new -sha256 -newkey rsa:2048 -nodes -keyout localhost.key -x509 -days 365 -out localhost.crt
  • openssl:这是用于创建和管理OpenSSL证书,密钥和其他文件的基本命令行工具。
  • req:此子命令指定我们要使用X.509证书签名请求(CSR)管理。“X.509”是SSL和TLS为其密钥和证书管理所遵循的公钥基础结构标准。我们想要创建一个新的X.509证书,所以我们使用这个子命令。
  • -x509:通过告诉实用程序我们要创建自签名证书而不是生成证书签名请求(通常会发生)来进一步修改上一个子命令。
  • -nodes:这告诉OpenSSL跳过用密码保护我们的证书的选项。当服务器启动时,我们需要Nginx能够在没有用户干预的情况下读取文件。密码短语会阻止这种情况发生,因为我们必须在每次重启后输入密码。
  • -days 365:此选项设置证书被视为有效的时间长度。我们在这里设置了一年。
  • -newkey rsa:2048:这指定我们要同时生成新证书和新密钥。我们没有创建在上一步中签署证书所需的密钥,因此我们需要将其与证书一起创建。该rsa:2048部分告诉它制作一个2048位长的RSA密钥。
  • -keyout:这一行告诉OpenSSL在哪里放置我们正在创建的生成的私钥文件。
  • -out:这告诉OpenSSL在哪里放置我们正在创建的证书。



然后这个目录下就会多了两个文件localhost.crtlocalhost.key
在这里插入图片描述

  • localhost.crt

localhost.crt,这就是生成的自签名证书(CRT 用于向CA请求证书的文件)

# localhost.crt

-----BEGIN CERTIFICATE-----

fdasfefFEQfJHJKJASCJLJIAJIj
...

-----END CERTIFICATE-----

  • localhost.key

localhost.key,CA私钥文件

# localhost.key

-----BEGIN PRIVATE KEY-----

VElSjtw86nTFKnOJhe2B9lk=
...


-----END PRIVATE KEY-----



④配置nginx

为了能使用我们刚刚生成的ssl证书用于nginx配置,那么就需要将刚刚生成的localhost.crtlocalhost.key拷贝一份到nginx的ssl目录下

# 比如:我的nginx的目录是/etc/nginx
cd /etc/nginx/ssl

在这里插入图片描述



由于是自签的证书,所以最好是在nginx下的conf.d目录单独创建一个配置文件用于做自签证书的环境配置,不过如果要让conf.d下的文件能生效,就需要在nginx.conf有这么一句话

在这里插入图片描述



进入到conf.d下,创建一个配置文件localhost.conf

vim localhost.conf

在这里插入图片描述

配置文件内容如下

server {
    listen 80;
    listen 443 ssl http2;
    server_name 192.168.XXX.XXX;				# 具体内容根据自身情况进行修改
    
   
    ssl_certificate     /etc/nginx/ssl/localhost.crt;
    ssl_certificate_key /etc/nginx/ssl/localhost.key;
    



    location / {
 	proxy_pass http://192.168.XXX.XXX:50000;			# 具体内容根据自身情况进行修改,端口根据自身情况进行修改
    }  
}

本地自签https证书_第2张图片



⑤nginx重新加载配置

nginx -s reload



⑥打开Web浏览器,然后在地址栏输入 https:// 及服务器的域名或IP

https://192.168.XXX.XXX

由于我们创建的证书未由您的某个浏览器的受信任证书颁发机构签名,所以会有不信任的警报跳出,但不重要,不影响我们进行一个测试
本地自签https证书_第3张图片

本地自签https证书_第4张图片



巨人的肩膀

从他人的工作中汲取经验来避免自己的错误重复,正如我们是站在巨人的肩膀上才能做出更好的成绩。

https://www.cnblogs.com/loleina/p/8418111.html
https://www.cnblogs.com/aaron-agu/p/10560659.html
https://blog.csdn.net/jackyzhousales/article/details/84030960
https://segmentfault.com/a/1190000012394467

你可能感兴趣的:(网络)