- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用以下代码在 java 中生成 CSR:
package demo;
import java.io.ByteArrayOutputStream;
import java.io.PrintStream;
import java.security.KeyPair;
import java.security.KeyPairGenerator;
import java.security.NoSuchAlgorithmException;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.SecureRandom;
import java.security.Signature;
import sun.security.pkcs10.PKCS10;
import sun.security.util.DerInputStream;
import sun.security.util.DerValue;
import sun.security.x509.CertificateExtensions;
import sun.security.x509.GeneralName;
import sun.security.x509.GeneralNames;
import sun.security.x509.SubjectAlternativeNameExtension;
import sun.security.x509.X500Name;
/**
* This class generates PKCS10 certificate signing request
*
* @author Pankaj@JournalDev.com
* @version 1.0
*/
public class GenerateCSR {
private static PublicKey publicKey = null;
private static PrivateKey privateKey = null;
private static KeyPairGenerator keyGen = null;
private static GenerateCSR gcsr = null;
private GenerateCSR() {
try {
keyGen = KeyPairGenerator.getInstance("RSA");
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
keyGen.initialize(2048, new SecureRandom());
KeyPair keypair = keyGen.generateKeyPair();
publicKey = keypair.getPublic();
privateKey = keypair.getPrivate();
}
public static GenerateCSR getInstance() {
if (gcsr == null)
gcsr = new GenerateCSR();
return gcsr;
}
public String getCSR(String cn) throws Exception {
byte[] csr = generatePKCS10(cn, "Java", "JournalDev", "Cupertino", "California", "USA");
return new String(csr);
}
/**
*
* @param CN Common Name, is X.509 speak for the name that distinguishes the Certificate best, and ties it to your
* Organization
* @param OU Organizational unit
* @param O Organization NAME
* @param L Location
* @param S State
* @param C Country
* @return
* @throws Exception
*/
private static byte[] generatePKCS10(String CN, String OU, String O, String L, String S, String C)
throws Exception {
GeneralNames generalNames = new GeneralNames();
generalNames.add(new GeneralName(new DerValue("b")));
generalNames.add(new GeneralName(new DerValue("a")));
CertificateExtensions ext = new CertificateExtensions();
ext.set(SubjectAlternativeNameExtension.NAME, new SubjectAlternativeNameExtension(generalNames));
// generate PKCS10 certificate request
String sigAlg = "MD5WithRSA";
PKCS10 pkcs10 = new PKCS10(publicKey);
Signature signature = Signature.getInstance(sigAlg);
signature.initSign(privateKey);
// common, orgUnit, org, locality, state, country
X500Name x500Name = new X500Name(CN, OU, O, L, S, C);
pkcs10.encodeAndSign(x500Name, signature);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(bs);
pkcs10.print(ps);
byte[] c = bs.toByteArray();
try {
if (ps != null)
ps.close();
if (bs != null)
bs.close();
} catch (Throwable th) {
}
return c;
}
public PublicKey getPublicKey() {
return publicKey;
}
public PrivateKey getPrivateKey() {
return privateKey;
}
public static void main(String[] args) throws Exception {
GenerateCSR gcsr = GenerateCSR.getInstance();
System.out.println("Public Key:\n" + gcsr.getPublicKey().toString());
System.out.println("Private Key:\n" + gcsr.getPrivateKey().toString());
String csr = gcsr.getCSR("journaldev.com <https://www.journaldev.com>");
System.out.println("CSR Request Generated!!");
System.out.println(csr);
}
}
如您所见,我正在使用以下代码添加 SAN 名称
GeneralNames generalNames = new GeneralNames();
generalNames.add(new GeneralName(new DerValue("b")));
generalNames.add(new GeneralName(new DerValue("a")));
CertificateExtensions ext = new CertificateExtensions();
ext.set(SubjectAlternativeNameExtension.NAME, new SubjectAlternativeNameExtension(generalNames));
我的问题是:
最佳答案
正如我在评论中所说,sun.*
类并不打算被其他程序员使用,我个人永远不会使用它们。 BouncycaSTLe 库可以做这一切,甚至更多。但是,如果您坚持使用这些类,那么您将需要使用更多才能获得预期的效果。注意:由于没有记录这些类(class),我在这里所拥有的主要是实验的结果。
请注意,MD5 不能用于签名,这样的应用程序完全不安全。我已将其替换为 SHA256。
考虑一下我修改过的这段代码。名称本身只是示例:
// ...
import sun.security.pkcs10.PKCS10Attribute;
import sun.security.pkcs10.PKCS10Attributes;
import sun.security.x509.*;
import sun.security.pkcs10.PKCS10;
import sun.security.pkcs.PKCS9Attribute;
// ....
GeneralNames generalNames = new GeneralNames();
generalNames.add(new GeneralName(new DNSName("a.example.com")));
generalNames.add(new GeneralName(new DNSName("never.ever.example.com")));
generalNames.add(new GeneralName(new IPAddressName("192.168.1.250")));
CertificateExtensions ext = new CertificateExtensions();
ext.set(SubjectAlternativeNameExtension.NAME, new SubjectAlternativeNameExtension(generalNames));
var pkcs9Attr = new PKCS9Attribute(PKCS9Attribute.EXTENSION_REQUEST_OID, ext);
var pkcs10Attrs = new PKCS10Attributes(new PKCS10Attribute[] {
new PKCS10Attribute(pkcs9Attr)
});
// generate PKCS10 certificate request
String sigAlg = "SHA256WithRSA";
PKCS10 pkcs10 = new PKCS10(publicKey, pkcs10Attrs);
Signature signature = Signature.getInstance(sigAlg);
signature.initSign(privateKey);
// common, orgUnit, org, locality, state, country
X500Name x500Name = new X500Name(CN, OU, O, L, S, C);
pkcs10.encodeAndSign(x500Name, signature);
ByteArrayOutputStream bs = new ByteArrayOutputStream();
PrintStream ps = new PrintStream(bs);
pkcs10.print(ps);
这应该会产生一个带有适当的 subjectAltName 扩展的 PKCS10 证书请求。
关于java - 以编程方式在 java 中生成 CSR 时添加 SAN 名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68941041/
是否可以让两个不同的证书(RSA 和 DSA)具有相同的通用名称但不同的 SAN 条目? 例如: 证书 1:类型 RSA CN=*.example.com SAN:*.example.ca, *.ex
我在我的网站上使用“Open Sans”、sans-serif 作为字体系列。但它在 mac 系统中看起来有点不同。 这是它在 mac 中的样子。和 这是在其他系统中。 最佳答案 这实际上是两种不同的
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 10 年前。 Improve th
我不明白这样做有什么意义?对我来说,它呈现的效果完全相同,那么为什么我应该使用 Arial、Helvetica、sans-serif 而不是仅使用 sans-serif? 最佳答案 用户看到的默认字体
这是字体在 chrome 中的样子: 这是火狐浏览器: 注意到 firefox 中字母之间奇怪的间距了吗?不过在 chrome 中没问题。 我观察到的一些事情: 更改字体大小可以解决问题 更改字体粗细
这真是一个奇怪的要求,我正在制作一个香港网站。我需要在同一个网页上支持简体和繁体中文,并且我还希望它是谷歌Noto字体。 Google 提供了简体和繁体两种字体版本。 我的问题是,如果我只设置Noto
为什么在这行 CSS 上会出现解析错误(第 24 行)? font-family: 'Open Sans', Helvetica, Arial, sans-serif; 我得到这个错误的完整代码是:
我按照此链接的说明进行操作:https://www.thegeekdiary.com/centos-rhel-7-how-to-make-custom-script-to-run-automatica
我有很多 CSS 执行以下操作: font-family: Helvetica, Arial, sans-serif; 据我了解,Helvetica 是 Mac 上的默认无衬线字体,而 Arial 是
随着主机、磁盘、网络等技术的发展,对于承载大量数据存储的服务器来说,服务器内置存储空间,或者说内置磁盘往往不足以满足存储需要。因此,在内置存储之外,服务器需要采用外置存储的方式扩展存储空间,今天在这里
我目前正在尝试确保 Wildfly 10 应用服务器仅接受 SSL。服务器在我的本地网络中。服务器是我私有(private)域的一部分。我已经从我的 CA 颁发了 SSL SAN 证书并配置 Wild
我们有 600TB 的 EMC SAN 存储。目前,Oracle RAC 正在使用此存储。出于可扩展性的原因,我们正在用 Hadoop 存储(Yarn、Spark - Hive、Shark)替换 Or
可以通过 IP 和 DNS 访问 Web 服务。 使用以下命令创建包含 DNS 作为通用名称以及 DNS 和 IP 作为 subjectAlternativeName 的自签名证书 openssl r
3 天前,我突然注意到我在使用 Google 字体中的“Open sans”字体作为主要字体之前建立的一些网站在 Chrome 上看起来很奇怪,断断续续和像素化。 我尝试了几个修复,从在 Window
我有一个 Nginx 服务器,客户端使用包含特定 CN 和 SAN 的客户端证书向其发出请求。我希望能够提取该客户端证书的 CN(通用名称)和 SAN(主题备用名称)字段。 粗略的示例配置: serv
我的CSS样式表似乎工作正常,但无法将字体更改为与iOS 11中使用的System字体紧密匹配的字体。这是我尝试的方法: body, html { color: red; font-f
假设您有以下网址: http://example.com/path?param=value "param=value"是查询字符串“/path”是路径“http://”是协议(protocol) “h
目前我的老板要求我的团队将我们的数据库迁移到云服务器(Windows)。除此之外,他还要求我们将 SAN/NAS 存储连接到该服务器,以获得更好的速度/性能。问题是我们没有SAN/NAS存储经验。 问
这个问题在这里已经有了答案: Is there a way to use Google Web Fonts in an HTML email? (2 个答案) 关闭 5 年前。 我们一直在尝试使用@
问题陈述是这样的:我有一个目录被配置为 SAN 分区的挂载点。现在,由于某些我无法避免的原因,这个 SAN 分区会在启动几分钟后挂载。与此同时,一些进程开始写入目录(仍然不在 SAN 上,只是一个本地
我是一名优秀的程序员,十分优秀!