<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSecurity%2FX509Certificate</id>
		<title>Java Tutorial/Security/X509Certificate - История изменений</title>
		<link rel="self" type="application/atom+xml" href="http://www.jexp.ru/index.php?action=history&amp;feed=atom&amp;title=Java_Tutorial%2FSecurity%2FX509Certificate"/>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Security/X509Certificate&amp;action=history"/>
		<updated>2026-04-21T13:12:34Z</updated>
		<subtitle>История изменений этой страницы в вики</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Security/X509Certificate&amp;diff=4342&amp;oldid=prev</id>
		<title>Admin: 1 версия</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Security/X509Certificate&amp;diff=4342&amp;oldid=prev"/>
				<updated>2010-06-01T05:01:48Z</updated>
		
		<summary type="html">&lt;p&gt;1 версия&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;tr style=&quot;vertical-align: top;&quot; lang=&quot;ru&quot;&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Предыдущая&lt;/td&gt;
				&lt;td colspan=&quot;1&quot; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Версия 05:01, 1 июня 2010&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot; lang=&quot;ru&quot;&gt;&lt;div class=&quot;mw-diff-empty&quot;&gt;(нет различий)&lt;/div&gt;
&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>http://www.jexp.ru/index.php?title=Java_Tutorial/Security/X509Certificate&amp;diff=4341&amp;oldid=prev</id>
		<title> в 17:44, 31 мая 2010</title>
		<link rel="alternate" type="text/html" href="http://www.jexp.ru/index.php?title=Java_Tutorial/Security/X509Certificate&amp;diff=4341&amp;oldid=prev"/>
				<updated>2010-05-31T17:44:27Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Новая страница&lt;/b&gt;&lt;/p&gt;&lt;div&gt;==  Creating a Self-Signed Version 1 Certificate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import java.security.InvalidKeyException;&lt;br /&gt;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.NoSuchProviderException;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.security.Security;&lt;br /&gt;
import java.security.SignatureException;&lt;br /&gt;
import java.security.cert.X509Certificate;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import javax.security.auth.x500.X500Principal;&lt;br /&gt;
import org.bouncycastle.x509.X509V1CertificateGenerator;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static X509Certificate generateV1Certificate(KeyPair pair) throws InvalidKeyException,&lt;br /&gt;
      NoSuchProviderException, SignatureException {&lt;br /&gt;
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
    X509V1CertificateGenerator certGen = new X509V1CertificateGenerator();&lt;br /&gt;
    certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));&lt;br /&gt;
    certGen.setIssuerDN(new X500Principal(&amp;quot;CN=Test Certificate&amp;quot;));&lt;br /&gt;
    certGen.setNotBefore(new Date(System.currentTimeMillis() - 10000));&lt;br /&gt;
    certGen.setNotAfter(new Date(System.currentTimeMillis() + 10000));&lt;br /&gt;
    certGen.setSubjectDN(new X500Principal(&amp;quot;CN=Test Certificate&amp;quot;));&lt;br /&gt;
    certGen.setPublicKey(pair.getPublic());&lt;br /&gt;
    certGen.setSignatureAlgorithm(&amp;quot;SHA256WithRSAEncryption&amp;quot;);&lt;br /&gt;
    return certGen.generateX509Certificate(pair.getPrivate(), &amp;quot;BC&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
    KeyPair pair = generateRSAKeyPair();&lt;br /&gt;
    X509Certificate cert = generateV1Certificate(pair);&lt;br /&gt;
    cert.checkValidity(new Date());&lt;br /&gt;
    cert.verify(cert.getPublicKey());&lt;br /&gt;
  }&lt;br /&gt;
  public static KeyPair generateRSAKeyPair() throws Exception {&lt;br /&gt;
    KeyPairGenerator kpGen = KeyPairGenerator.getInstance(&amp;quot;RSA&amp;quot;, &amp;quot;BC&amp;quot;);&lt;br /&gt;
    kpGen.initialize(1024, new SecureRandom());&lt;br /&gt;
    return kpGen.generateKeyPair();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Creating a Self-Signed Version 3 Certificate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import java.security.InvalidKeyException;&lt;br /&gt;
import java.security.KeyPair;&lt;br /&gt;
import java.security.KeyPairGenerator;&lt;br /&gt;
import java.security.NoSuchProviderException;&lt;br /&gt;
import java.security.SecureRandom;&lt;br /&gt;
import java.security.Security;&lt;br /&gt;
import java.security.SignatureException;&lt;br /&gt;
import java.security.cert.X509Certificate;&lt;br /&gt;
import java.util.Date;&lt;br /&gt;
import javax.security.auth.x500.X500Principal;&lt;br /&gt;
import org.bouncycastle.asn1.x509.BasicConstraints;&lt;br /&gt;
import org.bouncycastle.asn1.x509.ExtendedKeyUsage;&lt;br /&gt;
import org.bouncycastle.asn1.x509.GeneralName;&lt;br /&gt;
import org.bouncycastle.asn1.x509.GeneralNames;&lt;br /&gt;
import org.bouncycastle.asn1.x509.KeyPurposeId;&lt;br /&gt;
import org.bouncycastle.asn1.x509.KeyUsage;&lt;br /&gt;
import org.bouncycastle.asn1.x509.X509Extensions;&lt;br /&gt;
import org.bouncycastle.x509.X509V3CertificateGenerator;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static X509Certificate generateV3Certificate(KeyPair pair) throws InvalidKeyException,&lt;br /&gt;
      NoSuchProviderException, SignatureException {&lt;br /&gt;
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
    X509V3CertificateGenerator certGen = new X509V3CertificateGenerator();&lt;br /&gt;
    certGen.setSerialNumber(BigInteger.valueOf(System.currentTimeMillis()));&lt;br /&gt;
    certGen.setIssuerDN(new X500Principal(&amp;quot;CN=Test Certificate&amp;quot;));&lt;br /&gt;
    certGen.setNotBefore(new Date(System.currentTimeMillis() - 10000));&lt;br /&gt;
    certGen.setNotAfter(new Date(System.currentTimeMillis() + 10000));&lt;br /&gt;
    certGen.setSubjectDN(new X500Principal(&amp;quot;CN=Test Certificate&amp;quot;));&lt;br /&gt;
    certGen.setPublicKey(pair.getPublic());&lt;br /&gt;
    certGen.setSignatureAlgorithm(&amp;quot;SHA256WithRSAEncryption&amp;quot;);&lt;br /&gt;
    certGen.addExtension(X509Extensions.BasicConstraints, true, new BasicConstraints(false));&lt;br /&gt;
    certGen.addExtension(X509Extensions.KeyUsage, true, new KeyUsage(KeyUsage.digitalSignature&lt;br /&gt;
        | KeyUsage.keyEncipherment));&lt;br /&gt;
    certGen.addExtension(X509Extensions.ExtendedKeyUsage, true, new ExtendedKeyUsage(&lt;br /&gt;
        KeyPurposeId.id_kp_serverAuth));&lt;br /&gt;
    certGen.addExtension(X509Extensions.SubjectAlternativeName, false, new GeneralNames(&lt;br /&gt;
        new GeneralName(GeneralName.rfc822Name, &amp;quot;test@test.test&amp;quot;)));&lt;br /&gt;
    return certGen.generateX509Certificate(pair.getPrivate(), &amp;quot;BC&amp;quot;);&lt;br /&gt;
  }&lt;br /&gt;
  public static void main(String[] args) throws Exception {&lt;br /&gt;
    Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());&lt;br /&gt;
    &lt;br /&gt;
    KeyPair pair = generateRSAKeyPair();&lt;br /&gt;
    X509Certificate cert = generateV3Certificate(pair);&lt;br /&gt;
    cert.checkValidity(new Date());&lt;br /&gt;
    cert.verify(cert.getPublicKey());&lt;br /&gt;
  }&lt;br /&gt;
  public static KeyPair generateRSAKeyPair() throws Exception {&lt;br /&gt;
    KeyPairGenerator kpGen = KeyPairGenerator.getInstance(&amp;quot;RSA&amp;quot;, &amp;quot;BC&amp;quot;);&lt;br /&gt;
    kpGen.initialize(1024, new SecureRandom());&lt;br /&gt;
    return kpGen.generateKeyPair();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Display properties of X509 Certificate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.math.BigInteger;&lt;br /&gt;
import java.security.PublicKey;&lt;br /&gt;
import java.security.cert.CertificateFactory;&lt;br /&gt;
import java.security.cert.X509Certificate;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    CertificateFactory cf = CertificateFactory.getInstance(&amp;quot;X.509&amp;quot;);&lt;br /&gt;
    FileInputStream in = new FileInputStream(args[0]);&lt;br /&gt;
    java.security.cert.Certificate c = cf.generateCertificate(in);&lt;br /&gt;
    in.close();&lt;br /&gt;
    X509Certificate t = (X509Certificate) c;&lt;br /&gt;
    System.out.println(t.getVersion());&lt;br /&gt;
    System.out.println(t.getSerialNumber().toString(16));&lt;br /&gt;
    System.out.println(t.getSubjectDN());&lt;br /&gt;
    System.out.println(t.getIssuerDN());&lt;br /&gt;
    System.out.println(t.getNotBefore());&lt;br /&gt;
    System.out.println(t.getNotAfter());&lt;br /&gt;
    System.out.println(t.getSigAlgName());&lt;br /&gt;
    byte[] sig = t.getSignature();&lt;br /&gt;
    System.out.println(new BigInteger(sig).toString(16));&lt;br /&gt;
    PublicKey pk = t.getPublicKey();&lt;br /&gt;
    byte[] pkenc = pk.getEncoded();&lt;br /&gt;
    for (int i = 0; i &amp;lt; pkenc.length; i++) {&lt;br /&gt;
      System.out.print(pkenc[i] + &amp;quot;,&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Generate cert path for X.509 ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.security.cert.CertPath;&lt;br /&gt;
import java.security.cert.Certificate;&lt;br /&gt;
import java.security.cert.CertificateFactory;&lt;br /&gt;
import java.security.cert.X509Certificate;&lt;br /&gt;
import java.util.ArrayList;&lt;br /&gt;
import java.util.List;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    CertificateFactory cf = CertificateFactory.getInstance(&amp;quot;X.509&amp;quot;);&lt;br /&gt;
    List mylist = new ArrayList();&lt;br /&gt;
    for (int i = 0; i &amp;lt; args.length; i++) {&lt;br /&gt;
      FileInputStream in = new FileInputStream(args[i]);&lt;br /&gt;
      Certificate c = cf.generateCertificate(in);&lt;br /&gt;
      mylist.add(c);&lt;br /&gt;
    }&lt;br /&gt;
    CertPath cp = cf.generateCertPath(mylist);&lt;br /&gt;
    List cplist = cp.getCertificates();&lt;br /&gt;
    Object[] o = cplist.toArray();&lt;br /&gt;
    for (int i = 0; i &amp;lt; o.length; i++) {&lt;br /&gt;
      X509Certificate c = (X509Certificate) o[i];&lt;br /&gt;
      System.out.println(c.getSubjectDN());&lt;br /&gt;
      byte[] pbk = c.getPublicKey().getEncoded();&lt;br /&gt;
      for (int j = 0; j &amp;lt; pbk.length; j++) {&lt;br /&gt;
        System.out.print(pbk[j] + &amp;quot;,&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
      System.out.println(&amp;quot;\nIssued by &amp;quot; + c.getIssuerDN());&lt;br /&gt;
    }&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Print out X509Certificate&amp;quot;s properties ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.security.cert.CertificateFactory;&lt;br /&gt;
import java.security.cert.X509Certificate;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    FileInputStream fr = new FileInputStream(&amp;quot;sdo.cer&amp;quot;);&lt;br /&gt;
    CertificateFactory cf = CertificateFactory.getInstance(&amp;quot;X509&amp;quot;);&lt;br /&gt;
    X509Certificate c = (X509Certificate) cf.generateCertificate(fr);&lt;br /&gt;
    System.out.println(&amp;quot;\tCertificate for: &amp;quot; + c.getSubjectDN());&lt;br /&gt;
    System.out.println(&amp;quot;\tCertificate issued by: &amp;quot; + c.getIssuerDN());&lt;br /&gt;
    System.out.println(&amp;quot;\tThe certificate is valid from &amp;quot; + c.getNotBefore() + &amp;quot; to &amp;quot;&lt;br /&gt;
        + c.getNotAfter());&lt;br /&gt;
    System.out.println(&amp;quot;\tCertificate SN# &amp;quot; + c.getSerialNumber());&lt;br /&gt;
    System.out.println(&amp;quot;\tGenerated with &amp;quot; + c.getSigAlgName());&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==  Use X.509 certificate ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- start source code --&amp;gt;&lt;br /&gt;
   &lt;br /&gt;
    &amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
import java.io.BufferedWriter;&lt;br /&gt;
import java.io.FileInputStream;&lt;br /&gt;
import java.io.FileOutputStream;&lt;br /&gt;
import java.io.OutputStreamWriter;&lt;br /&gt;
import java.security.cert.Certificate;&lt;br /&gt;
import java.security.cert.CertificateFactory;&lt;br /&gt;
public class MainClass {&lt;br /&gt;
  public static void main(String args[]) throws Exception {&lt;br /&gt;
    CertificateFactory cf = CertificateFactory.getInstance(&amp;quot;X.509&amp;quot;);&lt;br /&gt;
    FileInputStream in = new FileInputStream(args[0]);&lt;br /&gt;
    Certificate c = cf.generateCertificate(in);&lt;br /&gt;
    in.close();&lt;br /&gt;
    String s = c.toString();&lt;br /&gt;
    FileOutputStream fout = new FileOutputStream(&amp;quot;tmp.txt&amp;quot;);&lt;br /&gt;
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(fout));&lt;br /&gt;
    out.write(s, 0, s.length());&lt;br /&gt;
    out.close();&lt;br /&gt;
  }&lt;br /&gt;
}&amp;lt;/source&amp;gt;&lt;br /&gt;
    &lt;br /&gt;
   &lt;br /&gt;
  &amp;lt;!-- end source code --&amp;gt;&lt;/div&gt;</summary>
			</entry>

	</feed>