教程来源
https://help.aliyun.com/document_detail/198938.html?spm=a2c4g.98727.0.0.da523103N3Bk7G
Apache安装证书
![图片[1]-https证书-秋风落叶](https://wangjian.run/wp-content/uploads/2023/06/1685934408-image.png)
相关代码块
在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证书-秋风落叶](https://wangjian.run/wp-content/uploads/2023/06/1685946042-image.png)
相关代码
#在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证书-秋风落叶](https://wangjian.run/wp-content/uploads/2023/06/1686041431-image.png)
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容