{"id":84570,"date":"2020-09-29T07:09:37","date_gmt":"2020-09-29T07:09:37","guid":{"rendered":"https:\/\/www.baeldung.com\/?p=87792"},"modified":"2020-09-29T07:09:37","modified_gmt":"2020-09-29T07:09:37","slug":"get-a-list-of-trusted-certificates-in-java","status":"publish","type":"post","link":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/2020\/09\/29\/get-a-list-of-trusted-certificates-in-java\/","title":{"rendered":"Get a List of Trusted Certificates in Java"},"content":{"rendered":"<p class=\"syndicated-attribution\"><meta name= \\\"keywords \\\" content= \\\"\u96fb\u5b50\u8a08\u7b97\u6a5f, \u6559\u80b2, IT \u96fb\u8166\u73ed,\u96fb\u8166\u88dc\u7fd2\uff0c \u96fb\u8166\u73ed\uff0c \u5bb6\u6559\uff0c \u79c1\u4eba\u8001\u5e2b\uff0c \u8cc7\u8a0a\u6280\u8853\uff0c \u7a0b\u5e8f\u8a2d\u8a08\uff0c \u96fb\u5b50\u8a08\u7b97\u6a5f\uff0c \u904a\u6232\uff0c \u860b\u679c\uff0c \u96fb\u5f71\uff0c \u8a08\u7b97\u6a5f\uff0c\u7de8\u78bc\uff0c Java\uff0c C\/C++\uff0c JavaScript\uff0c PHP\uff0c HTML\uff0c CSS\uff0c MySQL\uff0c mobile\uff0c Android\uff0c \u52d5\u6f2b\uff0c Python\uff0c teacher\uff0c \u88dc\u7fd2\uff0c \u96fb\u8166\u88dc\u7fd2 \u8cc7\u8a0a, \u7535\u5b50\u8ba1\u7b97\u673a, IT ,Game, apple, movie, Computer,student,Java,\u6559\u80b2, ,\u5b66\u751f, \u5b66\u4e60, learn, \u6559\u5b66,  Android, apple,anime, animation, \u4fe1\u606f\u6280\u672f, \u7a0b\u5e8f\u8bbe\u8ba1, \u79fb\u52a8\u7535\u8bdd, \u8cc7\u8a0a\u79d1\u6280,Game, Jeu, Juego,Call Of Duty ,\u4f7f\u547d\u53ec\u559a , \u6e38\u620f, \u7535\u5b50\u6e38\u620f,, \u591a\u4eba\u7535\u5b50\u6e38\u620f, \u7f51\u7edc\u6e38\u620f\uff0conline\uff0conline game, \u624b\u673a\u6e38\u620f, mobile \\\"><\/p>\n<h2 data-id=\"overview\">1. Overview<\/h2>\n<div class=\"bd-anchor\" id=\"overview\"><\/div>\n<p>In this quick tutorial, we&#8217;ll learn how to read a list of trusted certificates in Java through quick and practical examples.<\/p>\n<h2 data-id=\"loading-the-keystore\">2. Loading the <em>KeyStore<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"loading-the-keystore\"><\/div>\n<p>Java stores the trusted certificates in a special file named <em>cacerts<\/em> that lives inside our Java installation folder.<\/p>\n<p>Let&#8217;s start by reading this file and loading it into the <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-keystore#what-is-a-keystore\"><em>KeyStore<\/em><\/a>:<\/p>\n<pre><code class=\"language-java\">private KeyStore loadKeyStore() {\r\n    String relativeCacertsPath = \"\/lib\/security\/cacerts\".replace(\"\/\", File.separator);\r\n    String filename = System.getProperty(\"java.home\") + relativeCacertsPath;\r\n    FileInputStream is = new FileInputStream(filename);\r\n    KeyStore keystore = KeyStore.getInstance(KeyStore.getDefaultType());\r\n    String password = \"changeit\";\r\n    keystore.load(is, password.toCharArray());\r\n    return keystore;\r\n}<\/code><\/pre>\n<p><strong>The default password for this <em>KeyStore<\/em> is <em>&#8220;changeit&#8221;<\/em>, but it could be different if it was previously changed in our system.<\/strong><\/p>\n<p>Once loaded, the <em>KeyStore<\/em> will hold our trusted certificates, and next, we&#8217;ll see how to read them.<\/p>\n<h2 data-id=\"reading-certificates-from-a-specified-keystore\">3. Reading Certificates From a Specified <em>KeyStore<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"reading-certificates-from-a-specified-keystore\"><\/div>\n<p>We&#8217;re going to use the <em><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/security\/cert\/PKIXParameters.html\">PKIXParameters<\/a><\/em>\u00a0class, which takes a <em>KeyStore<\/em> as a constructor parameter:<\/p>\n<pre><code class=\"language-java\">@Test\r\npublic void whenLoadingCacertsKeyStore_thenCertificatesArePresent() {\r\n    KeyStore keyStore = loadKeyStore();\r\n    PKIXParameters params = new PKIXParameters(keyStore);\r\n    Set&lt;TrustAnchor&gt; trustAnchors = params.getTrustAnchors();\r\n    List&lt;Certificate&gt; certificates = trustAnchors.stream()\r\n      .map(TrustAnchor::getTrustedCert)\r\n      .collect(Collectors.toList());\r\n    assertFalse(certificates.isEmpty());\r\n}<\/code><\/pre>\n<p>The <em>PKIXParameters<\/em> class is usually used for validating a certificate, but in our example, we simply used it to exact the certificates from our <em>KeyStore<\/em>.<\/p>\n<p>When creating an instance of <em>PKIXParametrs<\/em>, it builds a list of <em><a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/docs.oracle.com\/en\/java\/javase\/11\/docs\/api\/java.base\/java\/security\/cert\/TrustAnchor.html\">TrustAnchor<\/a><\/em>\u00a0that will contain the trusted certificates present in our <em>KeyStore<\/em>.<\/p>\n<p>A <em>TrustAnchor<\/em> instance simply represents a trusted certificate.<\/p>\n<h2 data-id=\"reading-certificates-from-default-keystore\">4. Reading Certificates From Default <em>KeyStore<\/em><\/h2>\n<div class=\"bd-anchor\" id=\"reading-certificates-from-default-keystore\"><\/div>\n<p>We can also get a list of the trusted certificates present in our system by <strong>using the <em>TrustManagerFactory<\/em>\u00a0class and initializing it without a <em>KeyStore<\/em><\/strong>, which will use the default <em>KeyStore<\/em>.<\/p>\n<p>If we don&#8217;t provide a <em>KeyStore<\/em> explicitly, the same one from the previous chapter will be used by default:<\/p>\n<pre><code class=\"language-java\">@Test\r\npublic void whenLoadingDefaultKeyStore_thenCertificatesArePresent() {\r\n    TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());\r\n    trustManagerFactory.init((KeyStore) null);\r\n    List&lt;TrustManager&gt; trustManagers = Arrays.asList(trustManagerFactory.getTrustManagers());\r\n    List&lt;X509Certificate&gt; certificates = trustManagers.stream()\r\n      .filter(X509TrustManager.class::isInstance)\r\n      .map(X509TrustManager.class::cast)\r\n      .map(trustManager -&gt; Arrays.asList(trustManager.getAcceptedIssuers()))\r\n      .flatMap(Collection::stream)\r\n      .collect(Collectors.toList());\r\n    assertFalse(certificates.isEmpty());\r\n}<\/code><\/pre>\n<p>In the above example, we&#8217;ve used <em>X509TrustManager<\/em>, which is a specialized <em>TrustManager<\/em>\u00a0used to <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/x-509-authentication-in-spring-security\">authenticate the remote part of an SSL connection<\/a>.<\/p>\n<h2 data-id=\"certificate-aliases\">5. Certificate Aliases<\/h2>\n<div class=\"bd-anchor\" id=\"certificate-aliases\"><\/div>\n<p>A certificate alias is simply a <em>String<\/em> that uniquely identifies a certificate.<\/p>\n<p><strong>Among the default certificates imported by Java, there&#8217;s also a well-known certificate issued by GoDaddy, a public Internet domain registrar, which we&#8217;ll use in our tests:<\/strong><\/p>\n<pre><code class=\"language-java\">String GODADDY_CA_ALIAS = \"godaddyrootg2ca [jdk]\";<\/code><\/pre>\n<p>Let&#8217;s see how we can read all certificate aliases present in our <em>KeyStore<\/em>:<\/p>\n<pre><code class=\"language-java\">@Test\r\npublic void whenLoadingKeyStore_thenGoDaddyCALabelIsPresent() {\r\n    KeyStore keyStore = loadKeyStore();\r\n    Enumeration&lt;String&gt; aliasEnumeration = keyStore.aliases();\r\n    List&lt;String&gt; aliases = Collections.list(aliasEnumeration);\r\n    assertTrue(aliases.contains(GODADDY_CA_ALIAS));\r\n}<\/code><\/pre>\n<p>In the next example, we&#8217;ll see how we can retrieve a certificate by its alias:<\/p>\n<pre><code class=\"language-java\">@Test\r\npublic void whenLoadingKeyStore_thenGoDaddyCertificateIsPresent() {\r\n    KeyStore keyStore = loadKeyStore();\r\n    Certificate goDaddyCertificate = keyStore.getCertificate(GODADDY_CA_ALIAS);\r\n    assertNotNull(goDaddyCertificate);\r\n}<\/code><\/pre>\n<h2 data-id=\"conclusion\">6. Conclusion<\/h2>\n<div class=\"bd-anchor\" id=\"conclusion\"><\/div>\n<p><strong>In this quick article, we&#8217;ve looked at different ways of listing trusted certificates in Java through quick and practical examples.<\/strong><\/p>\n<p>As always, code snippets can be found <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/github.com\/eugenp\/tutorials\/tree\/master\/core-java-modules\/core-java-security-2\">over on GitHub<\/a>.<\/p>\n<p>The post <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/java-list-trusted-certificates\/\" >Get a List of Trusted Certificates in Java<\/a> first appeared on <a href=\"https:\/\/feeds.feedblitz.com\/~\/t\/0\/0\/baeldung\/~https:\/\/www.baeldung.com\/\" >Baeldung<\/a>.<\/p>\n<p><Img align=\"left\" border=\"0\" height=\"1\" width=\"1\" alt=\"\" style=\"border:0;float:left;margin:0;padding:0;width:1px!important;height:1px!important;\" hspace=\"0\" src=\"https:\/\/feeds.feedblitz.com\/~\/i\/636084538\/0\/baeldung\"><\/p>\n<div style=\"clear:both;padding-top:0.2em;\"><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/636084538\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\" style=\"border:0;margin:0;padding:0;\"><\/a>&#160;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-list-trusted-certificates#respond\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&#160;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-list-trusted-certificates\/feed\/\"><img decoding=\"async\" height=\"20\" style=\"border:0;margin:0;padding:0;\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&#160;<\/div>\n\n<p class=\"syndicated-attribution\"><figure class= \\\"wp-block-image alignnone \\\"><img src= \\\"http:\/\/itteacheritfreelance.hk\/test\/wordpress\/wp-content\/uploads\/2016\/05\/logo2-2.png\\\" alt=\\\"IT\u96fb\u8166\u88dc\u7fd2 java\u88dc\u7fd2 \u70ba\u5927\u5bb6\u914d\u5c0d\u96fb\u8166\u88dc\u7fd2,IT freelance, \u79c1\u4eba\u8001\u5e2b, PHP\u88dc\u7fd2,CSS\u88dc\u7fd2,XML,Java\u88dc\u7fd2,MySQL\u88dc\u7fd2,graphic design\u88dc\u7fd2,\u4e2d\u5c0f\u5b78ICT\u88dc\u7fd2,\u4e00\u5c0d\u4e00\u79c1\u4eba\u88dc\u7fd2\u548cFreelance\u81ea\u7531\u5de5\u4f5c\u914d\u5c0d\u3002\\\"\/><figcaption>\u7acb\u523b\u8a3b\u518a\u53ca\u5831\u540d\u96fb\u8166\u88dc\u7fd2\u8ab2\u7a0b\u5427!<\/figcaption><\/figure>\r\n<\/br>Find A Teacher Form:\r\n<\/br>https:\/\/docs.google.com\/forms\/d\/1vREBnX5n262umf4wU5U2pyTwvk9O-JrAgblA-wH9GFQ\/viewform?edit_requested=true#responses\r\n<\/br><\/br>Email:\r\n<\/br>public1989two@gmail.com<br><br><br><br><br><br><br>\r\n<a href=www.itsec.hk style=color:#FFFFFF;>www.itsec.hk<\/a><br>\r\n<a href=\\\"www.itsec.vip\\\" style=color:#FFFFFF;>www.itsec.vip<\/a><br>\r\n<a href=\\\"www.itseceu.uk\\\" style=color:#FFFFFF;>www.itseceu.uk<\/a><br><\/p>","protected":false},"excerpt":{"rendered":"<div class=\"mh-excerpt\"><p>Learn how to read a list of trusted certificates in Java through quick and practical examples<\/p>\n<p>The post <a rel=\"NOFOLLOW noopener noreferrer\" href=\"https:\/\/feeds.feedblitz.com\/~\/636084538\/0\/baeldung~Get-a-List-of-Trusted-Certificates-in-Java\/\" target=\"_blank\">Get a List of Trusted Certificates in Java<\/a> first appeared on <a rel=\"NOFOLLOW noopener noreferrer\" href=\"https:\/\/www.baeldung.com\/\" target=\"_blank\">Baeldung<\/a>.<\/p>\n<div><a title=\"Like on Facebook\" href=\"https:\/\/feeds.feedblitz.com\/_\/28\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/fblike20.png\"><\/a>&nbsp;<a title=\"Share on Google+\" href=\"https:\/\/feeds.feedblitz.com\/_\/30\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/googleplus20.png\"><\/a>&nbsp;<a title=\"Pin it!\" href=\"https:\/\/feeds.feedblitz.com\/_\/29\/636084538\/baeldung,\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/pinterest20.png\"><\/a>&nbsp;<a title=\"Tweet This\" href=\"https:\/\/feeds.feedblitz.com\/_\/24\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/twitter20.png\"><\/a>&nbsp;<a title=\"Subscribe by email\" href=\"https:\/\/feeds.feedblitz.com\/_\/19\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/email20.png\"><\/a>&nbsp;<a title=\"Subscribe by RSS\" href=\"https:\/\/feeds.feedblitz.com\/_\/20\/636084538\/baeldung\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/rss20.png\"><\/a>&nbsp;<a rel=\"NOFOLLOW\" title=\"View Comments\" href=\"https:\/\/www.baeldung.com\/java-list-trusted-certificates#respond\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/comments20.png\"><\/a>&nbsp;<a title=\"Follow Comments via RSS\" href=\"https:\/\/www.baeldung.com\/java-list-trusted-certificates\/feed\/\"><img decoding=\"async\" height=\"20\" src=\"https:\/\/assets.feedblitz.com\/i\/commentsrss20.png\"><\/a>&nbsp;<\/div>\n<\/div>","protected":false},"author":758,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"slim_seo":{"title":"Get a List of Trusted Certificates in Java - ITTeacherITFreelance.hk","description":"Learn how to read a list of trusted certificates in Java through quick and practical examples The post Get a List of Trusted Certificates in Java first appeared"},"footnotes":""},"categories":[6],"tags":[],"_links":{"self":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/84570"}],"collection":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/users\/758"}],"replies":[{"embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/comments?post=84570"}],"version-history":[{"count":3,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/84570\/revisions"}],"predecessor-version":[{"id":85409,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/posts\/84570\/revisions\/85409"}],"wp:attachment":[{"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/media?parent=84570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/categories?post=84570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/itteacheritfreelance.hk\/wordpress\/index.php\/wp-json\/wp\/v2\/tags?post=84570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}