https证书

教程来源

https://help.aliyun.com/document_detail/198938.html?spm=a2c4g.98727.0.0.da523103N3Bk7G

Apache安装证书

图片[1]-https证书-秋风落叶

相关代码块

在httpd-ssl.conf文件中找到以下参数,按照下文中注释内容进行配置。
<VirtualHost *:443>     
    ServerName   #修改为申请证书时绑定的域名。                    
    DocumentRoot  /data/www/hbappserver/public          
    SSLEngine on   
    SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM   # 修改加密套件。
    SSLHonorCipherOrder on
    SSLCertificateFile cert/domain_name1_public.crt   # 将domain_name1_public.crt替换成您证书文件名。
    SSLCertificateKeyFile cert/domain_name1.key   # 将domain_name1.key替换成您证书的密钥文件名。
    SSLCertificateChainFile cert/domain_name1_chain.crt  # 将domain_name1_chain.crt替换成您证书的密钥文件名;证书链开头如果有#字符,请删除。
</VirtualHost>

#如果证书包含多个域名,复制以上参数,并将ServerName修改为第二个域名。 
<VirtualHost *:443>     
    ServerName   #修改为申请证书时绑定的第二个域名。                    
    DocumentRoot  /data/www/hbappserver/public          
    SSLEngine on   
    SSLProtocol all -SSLv2 -SSLv3 # 添加SSL协议支持协议,去掉不安全的协议。
    SSLCipherSuite HIGH:!RC4:!MD5:!aNULL:!eNULL:!NULL:!DH:!EDH:!EXP:+MEDIUM   # 修改加密套件。
    SSLHonorCipherOrder on
    SSLCertificateFile cert/domain_name2_public.crt   # 将domain_name2替换成您申请证书时的第二个域名。
    SSLCertificateKeyFile cert/domain_name2.key   # 将domain_name2替换成您申请证书时的第二个域名。
    SSLCertificateChainFile cert/domain_name2_chain.crt  # 将domain_name2替换成您申请证书时的第二个域名;证书链开头如果有#字符,请删除。
</VirtualHost>

修改httpd.conf文件,设置HTTP请求自动跳转HTTPS。
在httpd.conf文件中的<VirtualHost *:80> </VirtualHost>中间,添加以下重定向代码。
RewriteEngine on
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{SERVER_NAME}$1 [L,R]

nginx安装证书

图片[2]-https证书-秋风落叶

相关代码

#在nginx.conf中定位到HTTP协议代码片段(http{}),并在HTTP协议代码里,按照以下代码示例,修改server属性配置。
#以下属性中,以ssl开头的属性表示与证书配置有关。
server {
    #配置HTTPS的默认访问端口为443。
    #如果未在此处配置HTTPS的默认访问端口,可能会造成Nginx无法启动。
    #如果您使用Nginx 1.15.0及以上版本,请使用listen 443 ssl代替listen 443和ssl on。
    listen 443 ssl;

    #填写证书绑定的域名
    server_name <yourdomain>;
    root html;
    index index.html index.htm;

    #填写证书文件名称
    ssl_certificate cert/<cert-file-name>.pem;
    #填写证书私钥文件名称  
    ssl_certificate_key cert/<cert-file-name>.key;

    ssl_session_timeout 5m;
    #表示使用的加密套件的类型
    ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
    #表示使用的TLS协议的类型,您需要自行评估是否配置TLSv1.1协议。
    ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;

    ssl_prefer_server_ciphers on;
    location / {
        #Web网站程序存放目录
        root html;
        index index.html index.htm;
    }
}

#设置HTTP请求自动跳转HTTPS
#方式1 rewrite 重定向
server {
    listen 80;
    #填写证书绑定的域名
    server_name <yourdomain>;
    #将所有HTTP请求通过rewrite指令重定向到HTTPS。
    rewrite ^(.*)$ https://$host$1;
    location / {
        index index.html index.htm;
    }
}
#方式2 301重定向
server {
  listen 80;
  return 301 https://$host:443$request_uri;

}


自签证书

Linux的openssl生成自签名证书

数字证书的基本概念

一般证书分有三类,根证书、服务器证书和客户端证书。

根证书,是生成服务器证书和客户端证书的基础,是信任的源头,也可以叫自签发证书,即CA证书。

服务器证书,由根证书签发,配置在服务器上的证书。

客户端证书,由根证书签发,配置在服务器上,并发送给客户,让客户安装在浏览器里的证书。

数字证书的标准

  • X.509版本号:指出该证书使用了哪种版本的X.509标准,版本号会影响证书中的一些特定信息
  • 序列号:由CA给予每一个证书分配的唯一的数字型编号,当证书被取消时,实际上是将此证书序列号放入由CA签发的CRL(Certificate Revocation List证书作废表,或证书黑名单表)中。这也是序列号唯一的原因
  • 签名算法标识符:用来指定CA签署证书时所使用的签名算法,常见算法如RSA
  • 签发者信息:颁发证书的实体的 X.500 名称信息。它通常为一个 CA
  • 证书的有效期:证书起始日期和时间以及终止日期和时间;指明证书在这两个时间内有效。
  • 主题信息:证书持有人唯一的标识,在 Internet上应该是唯一的
  • 发布者的数字签名:这是使用发布者私钥生成的签名,以确保这个证书在发放之后没有被撰改过。
  • 证书的公钥:包括证书的公钥、算法(指明密钥属于哪种密码系统)的标识符和其他相关的密钥参数

数字证书的常见格式

  • CSR:证书请求文件,这个并不是证书,而是向证书颁发机构获得签名证书的申请文件
  • CER:存放证书文件可以是二进制编码或者BASE64编码
  • CRT:证书可以是DER编码,也可以是PEM编码,在linux系统中比较常见
  • pem:该编码格式在RFC1421中定义,但他也同样广泛运用于密钥管理,实质上是 Base64 编码的二进制内容
  • DER:用于二进制DER编码的证书。这些证书也可以用CER或者CRT作为扩展名
  • JKS:java的密钥存储文件,二进制格式,是一种 Java 特定的密钥文件格式, JKS的密钥库和私钥可以用不同的密码进行保护
  • p12/PFX:包含所有私钥、公钥和证书。其以二进制格式存储,也称为 PFX 文件,在windows中可以直接导入到密钥区,密钥库和私钥用相同密码进行保护

数字证书和公钥的关系

数字证书是经过权威机构(CA)认证的公钥,通过查看数字证书,可以知道该证书是由那家权威机构签发的,证书使用人的信息,使用人的公钥。它有以下特点:

1、由专门的机构签发的数字证书才安全有效。

2、签发数字证书是收费的。

3、不会被冒充,安全可信。

4、数字证书有使用期限,过了使用期限,证书变为不可用。CA也可以在试用期内,对证书进行作废操作。

nginx示例

使用nginx代理实现ssl访问

生成服务端私钥

openssl genrsa -out server.key 2048

生成服务端公钥

 openssl rsa -in server.key -pubout -out server.pem

生成CA私钥

openssl genrsa -out ca.key 2048

生成CA证书签名请求文件CSR

[root@localhost ssl]# openssl req -new -key ca.key -out ca.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:anhui
Locality Name (eg, city) [Default City]:hefei 
Organization Name (eg, company) [Default Company Ltd]:wang
Organizational Unit Name (eg, section) []:wang
Common Name (eg, your name or your server's hostname) []:192.168.70.128
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:192.168.70.128

密码可以为空

使用私钥KEY文件和CSR文件签名生成CRT证书

[root@localhost ssl]# openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
Signature ok
subject=/C=cn/ST=anhui/L=hefei/O=wang/OU=wang/CN=192.168.70.128
Getting Private key

生成服务器端CRT证书

生成服务端签名请求CSR文件

[root@localhost ssl]# openssl x509 -req -in ca.csr -signkey ca.key -out ca.crt
Signature ok
subject=/C=cn/ST=anhui/L=hefei/O=wang/OU=wang/CN=192.168.70.128
Getting Private key
[root@localhost ssl]# openssl req -new -key server.key -out server.csr
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:cn
State or Province Name (full name) []:anhui
Locality Name (eg, city) [Default City]:hefei
Organization Name (eg, company) [Default Company Ltd]:wang
Organizational Unit Name (eg, section) []:wang
Common Name (eg, your name or your server's hostname) []:192.168.70.128
Email Address []:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:192.168.70.128

这里服务端和客户端的Organization Name (eg, company)以及Organizational Unit Name都必须要和CA的不一样才可以

向刚才生成的自己的CA机构申请签名CRT证书

openssl x509 -req -CA ca.crt -CAkey ca.key -CAcreateserial -in server.csr -out server.crt

最后生成需要的key和crt文件

[root@localhost ssl]# openssl rsa -in server.key -out server_nginx.key
writing RSA key
[root@localhost ssl]# ll
总用量 36
-rw-r--r-- 1 root root 1192 6月   6 16:15 ca.crt
-rw-r--r-- 1 root root 1041 6月   6 16:13 ca.csr
-rw-r--r-- 1 root root 1679 6月   6 16:05 ca.key
-rw-r--r-- 1 root root   17 6月   6 16:21 ca.srl
-rw-r--r-- 1 root root 1192 6月   6 16:21 server.crt
-rw-r--r-- 1 root root 1041 6月   6 16:19 server.csr
-rw-r--r-- 1 root root 1679 6月   6 16:01 server.key
-rw-r--r-- 1 root root 1679 6月   6 16:22 server_nginx.key
-rw-r--r-- 1 root root  451 6月   6 16:03 server.pem
[root@localhost ssl]# openssl x509 -req -days 3650 -in server.csr -signkey server_nginx.key -out server_nginx.crt
Signature ok
subject=/C=cn/ST=anhui/L=hefei/O=wang/OU=wang/CN=192.168.70.128
Getting Private key
[root@localhost ssl]# ll
总用量 40
-rw-r--r-- 1 root root 1192 6月   6 16:15 ca.crt
-rw-r--r-- 1 root root 1041 6月   6 16:13 ca.csr
-rw-r--r-- 1 root root 1679 6月   6 16:05 ca.key
-rw-r--r-- 1 root root   17 6月   6 16:21 ca.srl
-rw-r--r-- 1 root root 1192 6月   6 16:21 server.crt
-rw-r--r-- 1 root root 1041 6月   6 16:19 server.csr
-rw-r--r-- 1 root root 1679 6月   6 16:01 server.key
-rw-r--r-- 1 root root 1192 6月   6 16:22 server_nginx.crt
-rw-r--r-- 1 root root 1679 6月   6 16:22 server_nginx.key
-rw-r--r-- 1 root root  451 6月   6 16:03 server.pem
[root@localhost ssl]# 



#也可以生成pem文件,改个后缀就行
[root@localhost ssl]# openssl x509 -req -days 3650 -in server.csr -signkey server_nginx.key -out server_nginx.pem


将key和crt文件上传到nginx上并配置nginx配置文件

[root@localhost conf]# more nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;
        location / {
            root   html;
            index  index.html index.htm;
        }
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
    server {
        listen       443 ssl;
        server_name  localhost;
        ssl_certificate      /root/ssl/server_nginx.crt;
        ssl_certificate_key  /root/ssl/server_nginx.key;
        ssl_session_cache    shared:SSL:1m;
        ssl_session_timeout  5m;
        ssl_ciphers  HIGH:!aNULL:!MD5;
        ssl_prefer_server_ciphers  on;
        location / {
            root   html;
            index  index.html index.htm;
        }
    }
}



--也可以使用pem格式的
ssl_certificate      /root/ssl/server_nginx.crt;
ssl_certificate_key  /root/ssl/server_nginx.key;

参考资料来源

https://blog.csdn.net/weixin_54514751/article/details/129994166

图片[3]-https证书-秋风落叶

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片快捷回复

    暂无评论内容