本文目录一览:
- 1、数字签名和数字证书
- 2、1,java生成数字证书为什么会出现下图情况?我先说一下我是怎么做的。请高手指点
- 3、用openssl 和 keytool 生成 SSL证书
- 4、JAVA 如何生成证书
- 5、如何用Java调用Openssl生成一个数字证书
- 6、java生成数字证书以及验证数字证书的问题
数字签名和数字证书
数字签名是一种用于信息 真实性 和 完整性 校验的手段,一套数字签名包含签名和验证两种运算。下面是一套简单的数字签名示意图。
数字签名使用 非对称加密 技术。每个人都有一对钥匙,私钥只有本人知道,公钥公开,私钥签名,公钥验签。
在进行信息传递时,信息发送者用私钥生成签名并将公钥一起发送给信息接收者,接收者使用公钥验签。上述过程中信息完整性得到校验,但发送者的身份是否合法无法得知(因为任何人都可以声称自己是合法的),因此引入了 身份认证机构 。
身份认证机构是 信息接收者 能信任的机构,所有的公钥必须向该机构进行注册。注册后身份认证机构给发送者颁发一 数字证书 。对文件签名后,发送者把此数字证书连同文件及签名一起发给信息接收者,接收者向身份认证机构求证是否真地是用发送者密钥签发的文件。
数字证书是一种电子档案,用来证明公钥拥有者的身份。此档案包含了公钥信息、拥有者身份信息(主体)、以及数字证书认证机构(发行者)对该文件的数字签名。
证书的本质就是对公钥加数字签名,认证机构用自己的私钥对需要认证的人(或组织机构)的公钥进行数字签名并生成证书。
我们需要了解以下几种类型的证书
自签证书
用户可以自己生成数字证书,不过没有任何可信赖的人签名,它主要用于小范围测试,这种自签名证书通常不会被广泛信任,使用时可能会遇到电脑软件的安全警告。
根证书
根证书获得广泛认可,通常已预先安装在各种软体(包括操作系统、浏览器、电邮软件等),作为信任链的起点,来自于公认可靠的政府机关、证书颁发机构公司、非营利组织等,与各大软件商透过严谨的核认程序才在不同的软件广泛部署。由于部署程序复杂费时,需要行政人员的授权及机构法人身份的核认,一张根证书有效期可能长达二十年以上。在某些企业,也可能会在内部电脑自行安装企业自签的根证书,以支援内部网的企业级软件;但是这些证书可能未被广泛认可,只在企业内部适用。
中介证书
认证机构的一个重要任务就是为客户签发证书,虽然广泛认可的认证机构都已拥有根证书,相对应的私钥可用以签署其他证书,但因为密钥管理和行政考虑,一般会先行签发中介证书,才为客户作数位签署。中介证书的有效期会较根证书为短,并可能对不同类别的客户有不同的中介证书作分工。
TLS服务器证书
网站在互联网上提供服务时,域名就是服务器证书上主体,相关机构名称则写在组织或单位一栏上。证书和私钥会安装在服务器。客户端的软件(如浏览器)会执行认证路径验证算(Certification path validation algorithm)以确保安全,如果未能肯定加密通道是否安全(例如证书上的主体名称不对应网站域名、伺服器使用了自签证书、或加密算法不够强),可能会警告用户。
TLS客户端证书
客户端证书包含电子邮件地址或个人姓名,而不是主机名。客户端证书比较不常见,因为考虑到技术门槛及成本因素,通常都是由服务提供者验证客户身份,而不是依赖第三方认证机构。通常,需要使用到客户端证书的服务都是内部网的企业级软件,他们会设立自己的内部根证书,由企业的技术人员在企业内部的电脑安装相关客户端证书以便使用。在公开的互联网,大多数网站都是使用登入密码和Cookie来验证用户,而不是客户端证书。
根证书(自签证书)、中介证书和终端实体(TLS服务器/客户端)证书的形成如下信任链
证书一般遵从X.509格式规范
证书可以二进制或 Base64 形式储存,常见的文件扩展名有.cer、.crt、.der和.pem。如果把证书和私钥一起储存,则可以使用PKCS#12(.p12)格式。
我们在写对外 API 时,针对信息传递的安全考虑,做如下设计
我们使用 SHA256withRSA 进行签名,下面是一个Java简单例子
1,java生成数字证书为什么会出现下图情况?我先说一下我是怎么做的。请高手指点
你配置的是单向SSL,tomcat不会对用户身份作出验证。只是在tomcat和浏览器之间建立了SSL通道。身份验证部分还得自己写。
用openssl 和 keytool 生成 SSL证书
SSL(Secure Sockets Layer (SSL) and Transport Layer Security (TLS))被设计为加强Web安全传输(HTTP/HTTPS/)的协议(事实上还有SMTP/NNTP等) ,默认使用443端口
openssl 适用范围广。
keytool 单独针对 java application
数字证书是现代互联网中个体间相互信任的基石。
如果没有了数字证书,那么也就没有了各式各样的电商平台以及方便的电子支付服务。目前我们所提到的数字证书都是基于 ITU 制定的 X.509 标准。
简单来说,数字证书就是一张附带了数字签名的信息表。
x509证书一般会用到三类文件,key,csr,crt。
Key是私用密钥,openssl格式,通常是rsa算法。
csr是证书请求文件(certificate signing request),用于申请证书。在制作csr文件的时候,必须使用自己的私钥来签署申请,还可以设定一个密钥。
crt是CA认证后的证书文件(certificate),签署人用自己的key给你签署的凭证。
CA根证书的生成步骤
生成CA私钥(.key)--生成CA证书请求(.csr)--自签名得到根证书(.crt)(CA给自已颁发的证书)。
本质上就是用私钥去获取证书,然后把这两个文件一起放到server,以此来证明 我就是我 。
上面是交互式输入,非交互的方式如下
自签名是免费/测试的证书,浏览器默认不认可。
通常的方法是:提交CSR到证书公司(比如VeriSign,Inc),等对方发来证书。(当然这是要花钱的)
比如Nginx服务器,把 ca.key 和 ca.crt 放到 /etc/nginx/certs 目录。修改/etc/nginx/nginx.conf
重启服务生效
引入一个概念:SAN
SAN stands for “ Subject Alternative Names ” and this helps you to have a single certificate for multiple CN (Common Name).
简而言之,用SAN是为了省钱,一个证书给多个网址使用。如果用之前的交互方式来申请证书,根本没有地方来输入SAN,要解决这问题,需用到配置文件。
The entries in SAN certificate:
Create new Private Key and Certificate Signing Request
生成 private key 和 生成 CSR 合并成一步
例子
于是 ca.csr ca.key 都生成了,csr 用于申请证书。
Keytool 是一个Java数据证书的管理工具 , Keytool将密钥(key)和证书(certificates)存在一个称为keystore的文件中。
这是java专用方式,过程跟openssl 类似。
服务器配置可以使用私钥+证书合并在一起的文件,如jks或者pkcs12文件,这类文件一般叫key.keystore。(openssl使用两个文件)
(openssl 自签名参考上面)
测试阶段,也可以用keytool 来实现自签名(根据证书请求生成证书)。
用 jenkins 来举例
查看单个证书
列出keystore存在的所有证书
使用别名查看keystore特定条目
删除keystore里面指定证书
更改keysore密码
导出keystore里面的指定证书
JAVA 如何生成证书
下面产生一个自签证书。安装完J2SDK(这里用的是J2SDK1.4)后,在J2SDK安装目录的bin目录下,有一个keytool的可执行程序。利用keytool产生自签证书的步骤如下:
第一步,用-genkey命令选项,产生公私密钥对。在控制台界面输入:keytool -genkey -alias testkeypair -keyalg RSA -keysize 1024 -sigalg MD5withRSA。这里的-alias表示使用这对公私密钥产生新的keystore入口的别名(keystore是用来存放管理密钥对和证书链的,缺省位置是在使用者主目录下,以.keystore为名的隐藏文件,当然也可指定某个路径存放.keystore文件);-keyalg是产生公私钥对所用的算法,这里是RSA;-keysize定义密钥的长度;-sigalg是签名算法,选择MD5withRSA,即用RSA签名,然后用MD5哈希算法摘要。接下来,系统会提示进行一些输入:
输入keystore密码: abc123
您的名字与姓氏是什么?
[Unknown]: Li
您的组织单位名称是什么?
nbs
问题的其他解决办法参考 :
;t=JAVA+
如何用Java调用Openssl生成一个数字证书
openssl genrsa -des3 -out server.key 1024运行时会提示输入密码,此密码用于加密key文件(参数des3便是指加密算法,当然也可以选用其他你认为安全的算法.),以后每当需读取此文件(通过openssl提供的命令或API)都需输入口令.如果觉得不方便,也可以..
java生成数字证书以及验证数字证书的问题
数字证书有很多种,如果X509,
事实上,java.security 可以完成的。先掌握概念,做起来并不难。也可以百度得到。