关于SSL/TLS介绍见文章 SSL/TLS原理详解。
关于证书授权中心CA以及数字证书等概念,请移步 OpenSSL 与 SSL 数字证书概念贴 。
openssl是一个开源程序的套件、这个套件有三个部分组成:一是libcryto
,这是一个具有通用功能的加密库,里面实现了众多的加密库;二是libssl
,这个是实现ssl机制的,它是用于实现TLS/SSL的功能;三是openssl,是个多功能命令行工具,它可以实现加密解密,甚至还可以当CA来用,可以让你创建证书、吊销证书。
默认情况ubuntu和CentOS上都已安装好openssl。CentOS 6.x 上有关ssl证书的目录结构:
/etc/pki/CA/
newcerts 存放CA签署(颁发)过的数字证书(证书备份目录)
private 用于存放CA的私钥
crl 吊销的证书
/etc/pki/tls/
cert.pem 软链接到certs/ca-bundle.crt
certs/ 该服务器上的证书存放目录,可以房子自己的证书和内置证书
ca-bundle.crt 内置信任的证书
private 证书密钥存放目录
openssl.cnf openssl的CA主配置文件
1. 颁发证书
1.1 修改CA的一些配置文件
CA要给别人颁发证书,首先自己得有一个作为根证书,我们得在一切工作之前修改好CA的配置文件、序列号、索引等等。
vi /etc/pki/tls/openssl.cnf
:
...
[ CA_default ]
dir = /etc/pki/CA # Where everything is kept
certs = $dir/certs # Where the issued certs are kept
crl_dir = $dir/crl # Where the issued crl are kept
database = $dir/index.txt # database index file.
#unique_subject = no # Set to 'no' to allow creation of
# several ctificates with same subject.
new_certs_dir = $dir/newcerts # default place for new certs.
certificate = $dir/cacert.pem # The CA certificate
serial = $dir/serial # The current serial number
crlnumber = $dir/crlnumber # the current crl number
# must be commented out to leave a V1 CRL
crl = $dir/crl.pem # The current CRL
private_key = $dir/private/cakey.pem # The private key
RANDFILE = $dir/private/.rand # private random number file
...
default_days = 3650 # how long to certify for
...
# For the CA policy
[ policy_match ]
countryName = match
stateOrProvinceName = optional
localityName = optional
organizationName = optional
organizationalUnitName = optional
commonName = supplied
emailAddress = optional
...
[ req_distinguished_name ]
countryName = Country Name (2 letter code)
countryName_default = CN
countryName_min = 2
countryName_max = 2
stateOrProvinceName = State or Province Name (full name)
stateOrProvinceName_default = GD
...
[ req_distinguished_name ] 部分主要是颁证时一些默认的值,可以不动
一定要注意[ policy_match ]
中的设定的匹配规则,是有可能因为证书使用的工具不一样,导致即使设置了csr中看起来有相同的countryName,stateOrProvinceName等,但在最终生成证书时依然报错:
Using configuration from /usr/lib/ssl/openssl.cnf
Check that the request matches the signature
Signature ok
The stateOrProvinceName field needed to be the same in the
CA certificate (GuangDong) and the request (GuangDong)
touch index.txt serial
:
在CA目录下创建两个初始文件:
# touch index.txt serial
# echo 01 > serial
1.2 生成根密钥
# cd /etc/pki/CA/
# openssl genrsa -out private/cakey.pem 2048
为了安全起见,修改cakey.pem私钥文件权限为600或400,也可以使用子shell生成( umask 077; openssl genrsa -out private/cakey.pem 2048 )
,下面不再重复。
1.3 生成根证书
使用req命令生成自签证书:
# openssl req -new -x509 -key private/cakey.pem -out cacert.pem
会提示输入一些内容,因为是私有的,所以可以随便输入(之前修改的openssl.cnf会在这里呈现),最好记住能与后面保持一致。上面的自签证书cacert.pem
应该生成在/etc/pki/CA
下。
1.4 为我们的nginx web服务器生成ssl密钥
以上都是在CA服务器上做的操作,而且只需进行一次,现在转到nginx服务器上执行:
# cd /etc/nginx/ssl
# openssl genrsa -out nginx.key 2048
这里测试的时候CA中心与要申请证书的服务器是同一个。
1.5 为nginx生成证书签署请求
# openssl req -new -key nginx.key -out nginx.csr
...
Country Name (2 letter code) [AU]:CN
State or Province Name (full name) [Some-State]:GD
Locality Name (eg, city) []:SZ
Organization Name (eg, company) [Internet Widgits Pty Ltd]:COMPANY
Organizational Unit Name (eg, section) []:IT_SECTION
Common Name (e.g. server FQDN or YOUR name) []:your.domain.com
Email Address []:
Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
...
同样会提示输入一些内容,其它随便,除了Commone Name
一定要是你要授予证书的服务器域名或主机名,challenge password不填。
1.6 私有CA根据请求来签署证书
接下来要把上一步生成的证书请求csr文件,发到CA服务器上,在CA上执行:
# openssl ca -in nginx.csr -out nginx.crt
另外在极少数情况下,上面的命令生成的证书不能识别,试试下面的命令:
# openssl x509 -req -in server.csr -CA /etc/pki/CA/cacert.pem -CAkey /etc/pki/CA/private/cakey.pem -CAcreateserial -out server.crt
上面签发过程其实默认使用了-cert cacert.pem -keyfile cakey.pem
,这两个文件就是前两步生成的位于/etc/pki/CA
下的根密钥和根证书。将生成的crt证书发回nginx服务器使用。
到此我们已经拥有了建立ssl安全连接所需要的所有文件,并且服务器的crt和key都位于配置的目录下,剩下的是如何使用证书的问题。
2. 使用ssl证书
2.1 一般浏览器
浏览器作为客户端去访问https加密的服务器,一般不用去手动做其他设置,如https://www.google.com.hk
,这是因为Chrome、FireFox、Safari、IE等浏览器已经内置了大部分常用的CA的根证书,但自建CA的根证书就不再浏览器的信任列表中,访问时会提示如下:
IE浏览器
谷歌浏览器
安装网站证书后(同时也有信任的根证书),地址栏一般会显示绿色小锁
证书信息
导入证书到浏览器的方法:http://cnzhx.net/blog/self-signed-certificate-as-trusted-root-ca-in-windows/
2.2 为linux系统添加根证书
这一步不是必须的,一般出现在开发测试环境中,而且具体的应用程序应该提供添加证书的方法。
curl
工具可以在linux上模拟发送请求,但当它去访问https加密网站时就会提示如下信息:
# curl https://sean:sean@registry.domain.com:8000/
curl: (60) Peer certificate cannot be authenticated with known CA certificates
More details here: http://curl.haxx.se/docs/sslcerts.html
curl performs SSL certificate verification by default, using a "bundle"
of Certificate Authority (CA) public keys (CA certs). If the default
bundle file isn't adequate, you can specify an alternate file
using the --cacert option.
If this HTTPS server uses a certificate signed by a CA represented in
the bundle, the certificate verification probably failed due to a
problem with the certificate (it might be expired, or the name might
not match the domain name in the URL).
If you'd like to turn off curl's verification of the certificate, use
the -k (or --insecure) option.
提示上面的信息说明curl在linux的证书信任集里没有找到根证书,你可以使用curl --insecure
来不验证证书的可靠性,这只能保证数据是加密传输的但无法保证对方是我们要访问的服务。使用curl --cacert cacert.pem
可以手动指定根证书路径。我们也可以把根证书添加到系统(CentOS 5,6)默认的bundle:
# cp /etc/pki/tls/certs/ca-bundle.crt{,.bak} 备份以防出错
# cat /etc/pki/CA/cacert.pem >> /etc/pki/tls/certs/ca-bundle.crt
# curl https://sean:sean@registry.domain.com:8000
"docker-registry server (dev) (v0.8.1)"
2.3 nginx
在nginx配置文件(可能是/etc/nginx/sites-available/default
)的server指令下添加:
ssl on;
ssl_certificate /etc/nginx/ssl/nginx.crt;
ssl_certificate_key /etc/nginx/ssl/nginx.key;
同时注意 server_name 与证书申请时的 Common Name 要相同,打开443端口。当然关于web服务器加密还有其他配置内容,如只对部分URL加密,对URL重定向实现强制https访问,请参考其他资料。
3 关于证书申请
注意,如果对于一般的应用,管理员只需生成“证书请求”(后缀大多为.csr),它包含你的名字和公钥,然后把这份请求交给诸如verisign等有CA服务公司(当然,连同几百美金),你的证书请求经验证后,CA用它的私钥签名,形成正式的证书发还给你。管理员再在web server上导入这个证书就行了。如果你不想花那笔钱,或者想了解一下原理,可以自己做CA。从ca的角度讲,你需要CA的私钥和公钥。从想要证书的服务器角度将,需要把服务器的证书请求交给CA。
如果你要自己做CA,别忘了客户端需要导入CA的证书(CA的证书是自签名的,导入它意味着你“信任”这个CA签署的证书)。而商业CA的一般不用,因为它们已经内置在你的浏览器中了。
参考
- CentOS6.5下openssl加密解密及CA自签颁发证书详解
- 基于 OpenSSL 的 CA 建立及证书签发
- openssl建立证书,非常详细配置ssl+apache
- The Secure Sockets Layer and Transport Layer Security
相关推荐
自签名证书则是由证书持有者自行签署,而不是由受信任的证书颁发机构(CA)签署的。这种证书在测试环境中非常实用,因为它无需购买且能快速配置。本文将详细介绍如何在Nginx服务器上配置SSL自签名证书。 首先,我们...
注意,虽然自签发证书对于测试和内部使用是足够的,但对于生产环境,建议使用权威证书颁发机构(CA)签发的证书,以提供更高的信任度和浏览器兼容性。在实际操作中,还需要关注证书更新、过期监控以及安全最佳实践。
SSL证书是由受信任的证书颁发机构(CA)签发的数字证书,包含了网站的身份信息和公钥,用于验证网站身份和建立加密连接。主要组成部分有:域名、组织信息、公钥和CA的签名。 加载SSL证书到Nginx需要两个文件:私钥...
在搭建过程中,我们可能需要使用OpenSSL来生成自签名证书或从权威的证书颁发机构(CA)获取证书。 **步骤**: 1. **生成私钥**:使用OpenSSL的`genrsa`命令生成RSA私钥。 2. **生成证书签名请求(CSR)**:使用...
在本地生成SSL证书,可以帮助开发者在测试环境中模拟真实环境的安全设置,而无需依赖第三方证书颁发机构(CA)。下面将详细介绍如何生成本地SSL证书以及相关知识点。 1. SSL证书概述: SSL证书包含一个公钥和一个...
在描述中提到,为了实现HTTPS,你需要一个CA(证书颁发机构)证书。现代浏览器内置了一些网络证书,因此访问如淘宝、京东等知名网站时,用户无需自行安装。但对于自定义的网站,你需要获取证书。你可以选择免费或...
SSL证书由权威的证书颁发机构(CA)签发,它包含了网站的公钥、组织信息等,用于验证网站的身份并建立安全连接。阿里云作为知名的云服务提供商,也提供了免费的SSL证书服务。 安装步骤如下: 1. **申请阿里云免费...
本文介绍了一种基于Python和Nginx架构设计的双向条件接收(CA)系统,用于数字电视系统中的安全授权和管理。下面将详细阐述其知识点。 首先,系统的基本架构和工作原理需要理解。传统的CA系统基于单向HFC网络,通常...
当涉及到局域网内的服务器或客户端通信时,自签证书是一种常见的解决方案,特别是对于测试环境或内部网络,因为它们不必通过权威的证书颁发机构(CA)进行验证。Linux系统,如Ubuntu、CentOS、openEuler等,提供了...
证书是SSL/TLS协议的关键组成部分,包含公钥以及有关证书主体(如网站域名所有者)的信息,由权威的证书颁发机构(CA)签名验证。 `.keystore`是Java的密钥库文件格式,它存储了私钥和对应的公钥证书,以及其他类型...
标题 "nginx+tomcat8 ssl使用https访问" 涉及到的是在互联网服务中配置安全套接字层(SSL)以实现HTTPS访问的过程。HTTPS是HTTP协议的安全版本,通过SSL/TLS协议加密数据传输,保护用户隐私和网站数据安全。在这个...
CSR包含了组织信息和公共密钥,用于向证书颁发机构(CA)申请SSL证书。使用以下命令: ``` openssl req -new -key private.key -out csr.pem ``` 这会引导你输入组织的相关信息,如国家、地区、城市、组织名、...
SSL证书主要由证书颁发机构(CA)颁发,它包含公钥和网站的识别信息,如域名、组织名称等。当浏览器与服务器建立连接时,服务器会提供SSL证书,浏览器验证证书的合法性,然后使用证书中的公钥进行加密通信。 二、自...
3. 创建CA证书:生成私钥`genrsa -out ca.key 1024`,创建CSR`req config "E:\openssl1 .1.0\win64_SSL\openssl.cnf" newkey ca.key out ca.csr`,然后生成X.509证书`x509 -req -in ca.csr -signkey ca.key -out ca....
3. **获取证书**:你可以选择从免费的证书颁发机构(如Let's Encrypt)或付费的CA获取证书。对于自动化脚本,可以使用ACME协议与Let's Encrypt交互,例如使用`certbot`工具。 4. **转换证书格式**:如果你从非PEM...
通常由权威的证书颁发机构(CA)签发,如Let's Encrypt、Comodo、Symantec等。 2. **公钥和私钥**:SSL证书包含一个公钥和一个与之配对的私钥。公钥用于加密数据,私钥用于解密,确保只有接收方可以读取信息。 3. ...
- **购买SSL证书**:将CSR提交给证书颁发机构(CA)以获取签名的SSL证书。 - **下载并安装证书**:接收CA签发的证书文件,通常包括.crt和.key文件。 - **配置Apache**:编辑`httpd.conf`或特定的虚拟主机配置文件...
### Nginx双向SSL认证配置详解 #### 一、引言 随着网络安全意识的提高,SSL/TLS协议在Web服务器中的应用越来越广泛。双向SSL认证不仅保护了服务器免受未授权访问,还确保了客户端的身份安全可靠。本文将详细介绍...
【Nginx 配置详解】在 CentOS 6.5 环境下,配置 Nginx 1.6.2 可以实现多种高级功能,包括 SSL 双向认证、负载均衡和反向代理。以下是一份详细的配置步骤指南。 ### 1. 安装与准备 首先,确保你的系统是 CentOS 6.5...
请注意,自签名证书在浏览器中可能会显示警告,因为它们不是由受信任的证书颁发机构签署的。在生产环境中,应使用受信任的CA签发的证书来消除这些警告,并提供更高的安全性。 总结来说,本地nginx部署SSL的关键步骤...