<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:cc="http://cyber.law.harvard.edu/rss/creativeCommonsRssModule.html">
    <channel>
        <title><![CDATA[Tech x Talent - Medium]]></title>
        <description><![CDATA[Insights at the intersection of tech and talent. - Medium]]></description>
        <link>https://medium.com/coderbyte?source=rss----8ff38ed26d69---4</link>
        <image>
            <url>https://cdn-images-1.medium.com/proxy/1*TGH72Nnw24QL3iV9IOm4VA.png</url>
            <title>Tech x Talent - Medium</title>
            <link>https://medium.com/coderbyte?source=rss----8ff38ed26d69---4</link>
        </image>
        <generator>Medium</generator>
        <lastBuildDate>Wed, 15 Apr 2026 02:19:44 GMT</lastBuildDate>
        <atom:link href="https://medium.com/feed/coderbyte" rel="self" type="application/rss+xml"/>
        <webMaster><![CDATA[yourfriends@medium.com]]></webMaster>
        <atom:link href="http://medium.superfeedr.com" rel="hub"/>
        <item>
            <title><![CDATA[I Set Up OpenClaw on a Mac Mini With Security as Priority One. Here’s Exactly How.]]></title>
            <link>https://medium.com/coderbyte/i-set-up-openclaw-on-a-mac-mini-with-security-as-priority-one-heres-exactly-how-050b7f625502?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/050b7f625502</guid>
            <category><![CDATA[anthropic-claude]]></category>
            <category><![CDATA[openclaw]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[ai-agent]]></category>
            <category><![CDATA[ai]]></category>
            <dc:creator><![CDATA[Stephen Lee (Sungsoo)]]></dc:creator>
            <pubDate>Mon, 23 Mar 2026 12:04:40 GMT</pubDate>
            <atom:updated>2026-03-23T12:04:38.949Z</atom:updated>
            <content:encoded><![CDATA[<h4>OpenClaw is powerful. It can read your files and send messages all autonomously. It’s also terrifying if you set it up wrong.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/686/1*jCKNxHotV1HVv1pquZXT9g.jpeg" /></figure><p>Most guides walk you through the happy path. This one walks you through the secure path. I ran the manual onboarding flow on a Mac Mini with every decision filtered through one question: <em>what’s the worst that could happen?</em></p><p>Here’s the full playbook.</p><h3>The Setup: Two Accounts, One Machine</h3><p>Before touching OpenClaw, I created a separation of privilege on the Mac Mini itself.</p><p><strong>Admin account</strong> — used only for installing software (npm, Homebrew packages). This account doesn’t run OpenClaw.</p><p><strong>Standard (non-admin) account</strong> — this is where OpenClaw lives and runs. It can’t install system software, modify system files, or escalate privileges. If the agent gets tricked, the blast radius is contained.</p><p>I also confirmed FileVault (full-disk encryption) was on and the macOS firewall was enabled. Basic stuff, but easy to skip.</p><p>The install happens from admin:</p><pre>npm install -g openclaw@latest<br>openclaw --version  # Must be 2026.1.29 or later</pre><p>Version matters. <a href="https://nvd.nist.gov/vuln/detail/CVE-2026-25253">CVE-2026–25253</a> was a critical token exfiltration bug patched in 2026.1.29. If you’re running anything older, you’re exposed.</p><p>Then I switched to the standard user for everything else.</p><h3>Manual Onboarding, Step by Step</h3><p>I ran openclaw onboard to get full control over every setting. Here&#39;s what I chose at each step and why.</p><h3>Mode: Local</h3><p>The gateway runs directly on the Mac Mini. “Remote” is for connecting to a gateway on another machine — not what I needed.</p><h3>Model/Auth: Anthropic API Key</h3><p>I went with Anthropic and Claude Opus. The project’s creator explicitly recommends Anthropic models for stronger prompt-injection resistance. Older or weaker models are more easily manipulated — and when your agent has shell access, that matters.</p><h3>Gateway Config</h3><ul><li><strong>Port:</strong> 18789 (default, fine)</li><li><strong>Bind:</strong> 127.0.0.1 (loopback only — critical)</li><li><strong>Auth:</strong> Token mode</li><li><strong>Tailscale exposure:</strong> Off</li></ul><p>The bind address is the single most important security decision in the entire setup. Setting it to 127.0.0.1 means the gateway is only accessible from the Mac Mini itself. The Shodan exposure incident in January 2026 happened because people left this on 0.0.0.0 with no auth. Thousands of instances were found wide open — API keys, chat histories, full system access.</p><p>For Tailscale, I chose “Off.” Serve (tailnet-only) is acceptable if you need remote access later. Funnel (public internet) should never be used.</p><h3>DM Access: Pairing</h3><p>When asked “Configure DM access policies now?”, I said yes and kept the default: <strong>pairing</strong>. This means the first time anyone DMs the bot, a pairing code is generated that I have to manually approve. No approval, no access.</p><h3>Channels: Telegram</h3><p>I set up Telegram as my primary channel. It’s the simplest — no QR scanning, no second phone.</p><ol><li>Created a bot via @BotFather on Telegram</li><li>Saved the bot token in my password manager</li><li>Connected it: openclaw channels add --channel telegram --token &lt;TOKEN&gt;</li><li>Locked it down to only my Telegram user ID in channels.telegram.allowFrom</li></ol><p>I considered WhatsApp but decided against using my personal number. If the agent is compromised, an attacker could message your real contacts as you. A dedicated number with a prepaid SIM is the safer choice if you go that route.</p><h3>Skills: Skip for Now</h3><p>The wizard offered to install skills like Apple Notes and Apple Reminders. These require Homebrew packages, and since I’m on the non-admin account, the installs failed with permission errors on /opt/homebrew.</p><p>The fix: install the Homebrew dependencies from the admin account, then run openclaw doctor from the standard user. But more importantly — I skipped skills entirely on first setup. Every skill you add expands the agent&#39;s permissions. Start with zero and add deliberately.</p><h3>Daemon: Yes</h3><p>I installed the LaunchAgent so OpenClaw starts on boot and auto-restarts on crash. Runtime: Node (not Bun — compatibility issues with WhatsApp and Telegram channels).</p><h3>The Personality Bootstrap</h3><p>After the wizard finishes, the agent wakes up for the first time and asks who it is and who you are. This shapes its behavior going forward, so I was deliberate about it:</p><blockquote><em>Your name is Molty. I’m Stephen — just Stephen is fine.</em></blockquote><blockquote><em>Be direct, concise, and honest. If I ask you to do something dumb or risky, push back and tell me why. Don’t sugarcoat or over-explain. I’d rather hear a problem than have you blindly execute.</em></blockquote><blockquote><em>You’re running on a Mac Mini as my personal assistant. Core rules: Never delete files, send messages, or run commands with side effects without confirming with me first. Ask before acting on anything destructive or irreversible. Keep responses short unless I ask for detail. Flag security concerns proactively.</em></blockquote><p>The key line: <strong>“push back and tell me why.”</strong> By default, these agents are eager to please. You want an assistant that questions bad instructions, not one that executes them cheerfully.</p><h3>Post-Onboarding Lockdown</h3><p>Before doing anything else with the agent, I ran:</p><pre>openclaw security audit --deep<br>openclaw security audit --fix<br>chmod 700 ~/.openclaw # owner has rwx<br>chmod 600 ~/.openclaw/openclaw.json # owner has rw</pre><p>The audit catches common misconfigurations — open DM policies, exposed gateway, weak permissions. The --fix flag auto-tightens what it can.</p><h3>The Security Checklist I Now Live By</h3><ul><li>✅ Latest version (≥ 2026.1.29)</li><li>✅ Dedicated non-admin macOS user</li><li>✅ FileVault enabled</li><li>✅ macOS firewall on</li><li>✅ Gateway bound to 127.0.0.1</li><li>✅ Token auth on gateway</li><li>✅ Tailscale exposure off</li><li>✅ DMs set to pairing</li><li>✅ Channel allowlists locked to my IDs only</li><li>✅ Sandbox mode enabled</li><li>✅ SOTA model (Claude Opus 4.6)</li><li>✅ API spending limits set with provider</li><li>✅ Log redaction on</li><li>✅ All credentials in password manager / keychain</li><li>✅ No ClawHub skills installed without review</li><li>✅ openclaw security audit --deep run regularly</li></ul><h3>Honest Assessment</h3><p>OpenClaw is genuinely useful. It’s also genuinely risky if you’re careless. The security researchers at Bitsight, Kaspersky, and Cisco have all flagged real vulnerabilities — malicious ClawHub skills, prompt injection attacks through emails and web pages, exposed instances leaking everything.</p><p>The tool isn’t the problem. The defaults aren’t even the problem anymore (they’ve gotten much better since January). The problem is treating an autonomous agent with shell access like a harmless chatbot.</p><p>Set it up right the first time. Start locked down. Open things up only when you understand what you’re exposing.</p><p>Molty’s been running for a day now. So far, so good. 🦞</p><p>Now everything is set up. What skills should Molty have to automate my day-to-day? If you are curious about how I’m using Molty as my executive assistant, <a href="https://pub.towardsai.net/openclaw-post-onboarding-skills-apple-integrations-and-google-calendar-the-secure-way-4b4b4e49dfa8?sk=3e0ba8f2273e6f6f671b62f76e11734a">click here</a>.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=050b7f625502" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coderbyte/i-set-up-openclaw-on-a-mac-mini-with-security-as-priority-one-heres-exactly-how-050b7f625502">I Set Up OpenClaw on a Mac Mini With Security as Priority One. Here’s Exactly How.</a> was originally published in <a href="https://medium.com/coderbyte">Tech x Talent</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[The Role of Leadership in Project Management]]></title>
            <link>https://medium.com/coderbyte/the-role-of-leadership-in-project-management-171c52d3bcfc?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/171c52d3bcfc</guid>
            <category><![CDATA[leadership-development]]></category>
            <category><![CDATA[projects]]></category>
            <category><![CDATA[project-management]]></category>
            <category><![CDATA[leadership-skills]]></category>
            <category><![CDATA[leadership]]></category>
            <dc:creator><![CDATA[Michelangelo Ischia]]></dc:creator>
            <pubDate>Thu, 20 Nov 2025 12:18:47 GMT</pubDate>
            <atom:updated>2025-11-20T12:18:41.302Z</atom:updated>
            <content:encoded><![CDATA[<p>Although project management methods are important, meaningful change can only come from a qualitative leadership. A strong and inspirational leader helps the team overcome challenges, promotes and fosters teamwork and cooperation, and allows effective decision-making. The significance of leadership in project management will be discussed in this article, along with presentation of the key traits of a successful project leader.</p><figure><img alt="" src="https://cdn-images-1.medium.com/max/692/1*j0bBCU68iRhAURsh9Ynpwg.png" /><figcaption>Source: Canva.com</figcaption></figure><ol><li><strong>Setting the right vision and goal: </strong>a skilled project leader has a clear vision and effectively conveys it to team members. The leader aligns the team’s efforts by establishing a shared vision, allowing team members to work towards a common goal. Effective goal setting keeps the team focused, and accountable through the project’s lifecycle.</li><li><strong>Effective Communication: </strong>the project leader fosters open communication channels, encourages team members to share ideas, concerns, and updates. By facilitating effective communication, a leader strengthens team collaboration, resolves issues efficiently, and builds trust among team members.</li><li><strong>Team Management:</strong> a project leader allocates tasks taking into account the abilities and limitations of each team member. Leaders promote lifelong learning, develop skill sets, and encourage professional development opportunities for their team members. The capacity of a team to take ownership of their work and produce exceptional results is made possible by a leader who stimulates autonomy while offering guidance as needed.</li><li><strong>Stakeholders and Relationship Management: </strong>team’s relationship with the customer must also be stronger in order for them to communicate and progress toward a successful project delivery. Project management task leaders place a heavy emphasis on relationship building to achieve successful job completion.</li><li><strong>Negotiation: </strong>when communicating with clients, vendors, and other key stakeholders, successful project managers demonstrate excellent negotiating abilities. In addition, they use their negotiation skills to resolve disputes and guarantee that everyone succeeds in the project’s objectives.</li><li><strong>Risk Management:</strong> Leaders in project management are proactive in identifying potential risks and developing mitigation plans. They prioritize risk management to reduce the impact of adverse events on the project’s success. Timely identification and resolution of risks reduce the chances of costly delays or failures. Additionally, strong conflict resolution skills foster a harmonious team environment, preventing disputes from impeding project progress.</li><li><strong>Adaptability:</strong> Projects are dynamic and uncertainties are unavoidable. A leader who can adjust to changing circumstances and retain a positive attitude contributes to the development of a culture of resilience within the team. This adaptability helps the team to respond quickly to unforeseen occurrences and limit the impact of risks on the project’s timetable and objectives.</li></ol><h4><strong>Conclusion</strong></h4><p>The main characteristics of successful leadership in project management have a major impact on project results and team performance. A talented project manager who posses these characteristics may boost team motivation, negotiate problems expertly, manage stakeholders efficiently, and ultimately contribute to the organization’s overall success. As projects become increasingly complicated and dynamic, the value of excellent project leadership grows, making it a critical aspect in ensuring long-term project success.</p><p>Enjoyed reading this article? You may also be interested in:</p><ul><li><a href="https://bootcamp.uxdesign.cc/navigating-the-storm-how-to-deal-with-vuca-in-project-management-8fc0c10ed2b">Navigating the Storm: How to Deal With VUCA in Project Management?</a></li><li><a href="https://bootcamp.uxdesign.cc/why-how-what-project-roadmap-161be1d28551">Why, how, what — project roadmap</a></li><li><a href="https://medium.com/@TheProjectista/benefits-and-challenges-of-using-artificial-intelligence-in-project-management-629b7e234025">Benefits and Challenges of Using Artificial Intelligence in Project Management</a></li></ul><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=171c52d3bcfc" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coderbyte/the-role-of-leadership-in-project-management-171c52d3bcfc">The Role of Leadership in Project Management</a> was originally published in <a href="https://medium.com/coderbyte">Tech x Talent</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[7 Simple Steps for Successful New Product Development]]></title>
            <link>https://medium.com/coderbyte/7-simple-steps-for-successful-new-product-development-983b03c2fecb?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/983b03c2fecb</guid>
            <category><![CDATA[product-development-plan]]></category>
            <category><![CDATA[productdevelopmentprocess]]></category>
            <category><![CDATA[new-product-development]]></category>
            <category><![CDATA[product-development]]></category>
            <dc:creator><![CDATA[Mark Williams]]></dc:creator>
            <pubDate>Mon, 29 Apr 2024 11:59:58 GMT</pubDate>
            <atom:updated>2024-04-29T11:59:58.203Z</atom:updated>
            <content:encoded><![CDATA[<figure><img alt="New Product Development" src="https://cdn-images-1.medium.com/max/996/1*jZtWROlHnC6HZvfnhnzgSQ.jpeg" /><figcaption><strong>Source</strong>: freepik.com</figcaption></figure><p>Introducing a new product to the market comes with many challenges. There are multitudes involved in new product development that need to be considered and reconsidered. A valuable idea is worth pennies if not executed right. In this post, we discuss 7 simple steps that must be covered for new product development. Before we delve into them, let us look at the new product development process and what it entails.</p><h3>What is the new product development process?</h3><p>The entire process of developing a new software product, from conception to launch, is called new product development. A new product development process or cycle usually entails 7 simple steps.</p><ol><li>Idea generation</li><li>Idea screening</li><li>Concept development and testing</li><li>Marketing strategy and business analysis</li><li>Product development</li><li>Test marketing</li><li>Product launch</li></ol><p>The product development cycle is often confused with the product life cycle, which is slightly different. A product cycle comprises stages such as introduction/launch, growth, maturity, saturation, and decline. The development cycle, on the other hand, focuses only on the introduction of the product to the market.</p><p>Each of the phases as mentioned above has a critical effect on the quality of the product that is developed in due process. A systemized approach to development can lead to better product development, ensuring product efficiency, quality, and reliability. Given are 7 simple steps to efficient new product development:</p><h3>Idea conception and research</h3><p>An interesting functional concept can go a long way when executed right. It is important to brainstorm and ideate consistently while keeping market trends and customer requirements in mind. The research should be thoroughly based on a few important parameters:</p><h4>Target Audience</h4><p>Building buyer personas is a great way to understand the intended audience of a product. It is an excellent opportunity to understand client needs and customers. Understanding a key demographic also helps identify gaps in current market trends and understand buyer behavior better.</p><h4>Competition</h4><p>Another important parameter is to study the competitors of the product thoroughly. What are the USPs, and what is the product’s unique quality already on the market? What are the needs that are not being catered to? Are you breaking into a market with a new product, or are similar products available? A thorough competitor analysis can go a long way.</p><h4>Success metrics</h4><p>One must also look out for various KPAs of the product. KPAs, or Key Performance Indicators, provide excellent insights into how the product is performing or will perform in the market. Various KPAs include average order value, deal size, customer lifetime value, and understanding how the marketing efforts turn in. Further SWOT analysis helps understand the strengths and weaknesses.</p><h3>Idea Screening</h3><p>This phase revolves around segregating the idea from the other ideas that have been brainstormed. Only the best idea with the most potential is decided upon after being run by industry experts and engineers. A POC or proof of concept further helps establish an idea’s feasibility in development and market. An agile development team can be a great consultant for providing <a href="https://www.openxcell.com/product-development-consulting/">product development consulting</a> services for selecting the best idea and building a POC.</p><h3>Concept development and testing</h3><p>Once the Idea is screened, it is important to build a detailed plan of the idea and user stories. Concept development and testing usually entail a few important steps.</p><p>The easy-to-follow concept development steps include:</p><ul><li>Quantifying Gain/Pain Ratio: Metric to understand the difference and ratio between what the customer is gaining from the product and how much effort the customer requires for the same.</li><li>Conducting a Competitor Analysis: Although covered in the Idea conceptualization phase, a more thorough competitor analysis can improve the product. Providing what a competitor fails to provide in their product further garners brand faith.</li><li>Enlisting the Major Product Features: Products are often bombarded with extra feattures or lack basic features. This is why the feature list should be decided upon with much scrutiny on functionality and uniqueness.</li><li>Create a Value Proposition Chart: A value proposition chart is a general, well-defined idea of the application for the customer/client and end-user.</li><li>Concept Testing: Once the value proposition is ready, the concept is introduced to a select crowd and tested for its features. This helps identify popular and unpopular aspects of the product. It is essential to understand the market response and improve the product.</li></ul><h3>Marketing strategy and analysis</h3><p>After the product is ready, developers work on the marketing strategy that involves marketing the product to its intended audience. The 4Ps of marketing strategy have been popular since the 1960s. These 4P’s in marketing stands for:</p><ul><li><strong>Price</strong>: A competitive price should be decided for the product</li><li><strong>Place</strong>: The place of distribution should be next to the target audience</li><li><strong>Promotion</strong>: Apt promotions and advertisements are required for maximum penetration in the market.</li><li><strong>Product</strong>: The marketing campaign should revolve around leveraging the USPs of the product to the masses.</li></ul><h3>Product development</h3><p>This is the most important phase in new product development, and this is the stage where the idea is primarily executed. While many development firms follow Agile methodology, few still believe in conventional Waterfall. Agile is different and considered more productive as it iterates the waterfall approach multiple times to identify early failures. However, five simple steps are common to both methodologies:</p><ol><li>Define scope and plan the move forward</li><li>Design the blueprint for the next development process</li><li>Develop the product using the latest tech stacks and technologies</li><li>Test rigorously for potential failures and multiple scenarios</li><li>Deploy for the masses.</li></ol><h3>Test marketing</h3><p>Test marketing is an innovative process in which the product is made available to a niche crowd on a limited basis. Critical feedback is then collected and used to improve the product for the final launch. The first prototype, aka Minimum Viable Product(MVP), has basic features and essentials for the initial crowd.</p><h3>Product launch</h3><p>In this stage, plans, specifications, and project blueprints are transferred to clientele for further production of software products. This is the final phase, in which the product is released to the customers as downloads and upgrades. It is also where the marketing strategies need to be implemented for maximum reach and market penetration.</p><h3>Need for efficient New product development process — Conclusion</h3><p>Effective new product development can be a game-changer for an organization looking to achieve organic growth by creating products to combat customer grievances. Apart from this, companies’ investment in new product development can help understand and meet changing consumer needs, maintain a competitive edge, and leverage the latest technologies. However, it is equally important to pick a reliable <a href="https://www.openxcell.com/software-product-development/">product development company</a> that can help bring the company’s vision to reality.</p><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=983b03c2fecb" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coderbyte/7-simple-steps-for-successful-new-product-development-983b03c2fecb">7 Simple Steps for Successful New Product Development</a> was originally published in <a href="https://medium.com/coderbyte">Tech x Talent</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[Using RestTemplate with client certificates]]></title>
            <link>https://medium.com/coderbyte/using-resttemplate-with-client-certificates-a25feb2d9918?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/a25feb2d9918</guid>
            <category><![CDATA[ssl-certificate]]></category>
            <category><![CDATA[spring-boot]]></category>
            <category><![CDATA[java]]></category>
            <category><![CDATA[sslsecurity]]></category>
            <category><![CDATA[rest-api]]></category>
            <dc:creator><![CDATA[Isurie K. Liyanage]]></dc:creator>
            <pubDate>Fri, 19 Apr 2024 11:55:53 GMT</pubDate>
            <atom:updated>2024-09-17T11:56:21.985Z</atom:updated>
            <content:encoded><![CDATA[<h4>How to use RestTemplate for making an HTTP call with certificates and keys in a Spring Boot application.</h4><figure><img alt="" src="https://cdn-images-1.medium.com/max/1024/1*jns_-UJZksbv9CQryP9nQw.jpeg" /></figure><p>Secure communication over HTTPS is vital in modern web applications to protect sensitive data during transit. When integrating with external services or APIs that require client certificate authentication, configuring RestTemplate in Spring becomes essential. This article will explore how to set up RestTemplate to communicate securely using client certificates.</p><p>Configuring RestTemplate with Client Certificates: To set up RestTemplate for communicating over HTTPS with client certificates, follow these steps:</p><ol><li><strong>Create a Spring Configuration Class:</strong></li></ol><p>Configure RestTemplate with Client Certificates To set up RestTemplate for secure communication using client certificates, create a configuration class as follows:</p><pre>// RestTemplate configuration<br>@Configuration<br>public class RestClientConfig {<br><br>    @Value(&quot;${ssl.client.keystore.path}&quot;)<br>    private String keyStoreResourcePath;<br><br>    @Value(&quot;${ssl.client.truststore.path}&quot;)<br>    private String trustStoreResourcePath;<br><br>    @Value(&quot;${ssl.client.keystore.password}&quot;)<br>    private String keyStorePassword;<br><br>    @Autowired<br>    public purchaseService(@Qualifier(&quot;purchaseRestTemplate&quot;) RestTemplate restClientConfig) {<br>        this.purchaseRestTemplate = restClientConfig;<br>    }<br><br>    @Bean<br>    public RestTemplate restTemplate() {<br>        SSLContext sslContext = null;<br>        try {<br>            sslContext = SSLContext.getInstance(&quot;TLS&quot;);<br><br>            // Load client certificate and private key<br>            KeyStore keyStore = KeyStore.getInstance(&quot;PKCS12&quot;);<br>            char[] keyStorePasswordArray = keyStorePassword.toCharArray();<br>            Resource keyStoreResource = new FileSystemResource(keyStoreResourcePath);<br>            URL keyStoreUrl = keyStoreResource.getURL();<br>            if (keyStoreUrl == null) {<br>                throw new FileNotFoundException(&quot;Keystore file not found on classpath&quot;);<br>            }<br>            keyStore.load(keyStoreUrl.openStream(), keyStorePasswordArray);<br><br>            KeyManagerFactory keyManagerFactory = KeyManagerFactory.getInstance(KeyManagerFactory.getDefaultAlgorithm());<br>            keyManagerFactory.init(keyStore, keyStorePasswordArray);<br><br>            // Load trust store<br>            KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());<br>            Resource trustStoreResource = new FileSystemResource(trustStoreResourcePath);<br>            URL trustStoreUrl = trustStoreResource.getURL();<br>            if (trustStoreUrl == null) {<br>                throw new FileNotFoundException(&quot;Truststore file not found on classpath&quot;);<br>            }<br>            trustStore.load(trustStoreUrl.openStream(), keyStorePasswordArray);<br><br>            // Initialize TrustManagerFactory with the trust store<br>            TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());<br>            trustManagerFactory.init(trustStore);<br><br>            // Initialize SSL context<br>            sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());<br><br>            return new RestTemplate(new CustomRequestFactory(sslContext));<br>        } catch (NoSuchAlgorithmException | UnrecoverableKeyException | CertificateException | KeyStoreException |<br>                IOException | KeyManagementException e) {<br>            throw new RuntimeException(e);<br>        }<br>    }<br><br>    // Other configurations...<br>    private static class CustomRequestFactory extends org.springframework.http.client.SimpleClientHttpRequestFactory {<br><br>        private final SSLContext sslContext;<br><br>        public CustomRequestFactory(SSLContext sslContext) {<br>            this.sslContext = sslContext;<br>        }<br><br>        @Override<br>        protected void prepareConnection(java.net.HttpURLConnection connection, String httpMethod) throws IOException {<br>            if (connection instanceof javax.net.ssl.HttpsURLConnection) {<br>                ((javax.net.ssl.HttpsURLConnection) connection).setSSLSocketFactory(sslContext.getSocketFactory());<br>                //((javax.net.ssl.HttpsURLConnection) connection).setHostnameVerifier((hostname, session) -&gt; true);// In a secure production environment, hostname verification should be enabled to ensure that the server being accessed is the intended one and to prevent potential security vulnerabilities <br>            }<br>            super.prepareConnection(connection, httpMethod);<br>        }<br>    }<br><br>}</pre><p>Explanation:</p><ul><li>This configuration class sets up RestTemplate to communicate securely over HTTPS.</li><li>It loads the client certificate and private key from a PKCS12 keystore and trust store from a JKS truststore.</li><li><strong>TrustManagerFactory</strong>: This is used to create trust managers based on the loaded trust store.</li></ul><pre>TrustManagerFactory trustManagerFactory = TrustManagerFactory.getInstance(TrustManagerFactory.getDefaultAlgorithm());<br>trustManagerFactory.init(trustStore);</pre><ul><li><strong>sslContext.init()</strong>: The trust managers are passed to the SSLContext to ensure the server&#39;s certificate is validated against the trust store.</li></ul><pre>sslContext.init(keyManagerFactory.getKeyManagers(), trustManagerFactory.getTrustManagers(), new SecureRandom());</pre><ul><li>It returns a RestTemplate configured with a custom request factory (CustomRequestFactory) to set up SSL context and hostname verifier for HTTPS connections.</li></ul><p><strong>2. Use RestTemplate in Service Classes</strong></p><p>Let’s see how to use the configured RestTemplate in-service classes. Below is an example service class that communicates with an external API using RestTemplate:</p><pre>@Slf4j<br>@Service<br>public class purchaseService {<br><br>    private final RestTemplate purchaseRestTemplate;<br><br>    @Value(&quot;${external.purchapi.username}&quot;)<br>    private String username;<br><br>    @Value(&quot;${external.purchapi.password}&quot;)<br>    private String password;<br><br>    // Other fields and constructors...<br><br>    @Autowired<br>    public purchaseService(@Qualifier(&quot;purchaseRestTemplate&quot;) RestTemplate restClientConfig) {<br>        this.purchaseRestTemplate = restClientConfig;<br>    }<br><br>    // Rest of the service class code...<br>}</pre><p><strong>Additional Steps to Use CA Certificate and Client Certificate with a Key in RestTemplate:</strong></p><p>Install OpenSSL: Make sure OpenSSL is installed on your system. You can download and install it from the OpenSSL website or use a package manager like Homebrew (for macOS) or apt-get (for Linux).</p><p><a href="https://www.xolphin.com/support/OpenSSL/OpenSSL_-_Installation_under_Windows">OpenSSL — Installation under Windows</a></p><ol><li>Create a PKCS12 (P12) File: Use OpenSSL to create a PKCS12 file containing the client certificate and private key.</li></ol><p>Sample Command:</p><pre>openssl pkcs12 -export -out certificate.p12 -inkey testservercert.key -in cent_test.crt</pre><p>3. Create a Java KeyStore (JKS) File: Create a new Java KeyStore (JKS) file and import the CA certificate into it. You may need to enter a keystore password.</p><p>Sample Command:</p><pre>keytool -import -file external_ca_test.crt -alias ca-alias -keystore truststore.jks</pre><p><em>The bellow command can be used to view the certificates stored in the truststore, which are used to establish trust relationships with external entities, such as servers</em></p><pre>keytool -list -keystore truststore.jks</pre><h4>Sample Curl Command:</h4><pre>curl -ki --cacert &#39;/ibl/app/bnk/assest/external_ca_test.crt&#39; <br>--cert &#39;/ibl/app/bnk/assest/cent_test.crt&#39; <br>--key &#39;/ibl/app/bnk/assest/testservercert.key&#39; <br>--location --header &#39;Authorization: Basic REPLACE_WITH_BASE64_ENCODED_CREDENTIALS&#39; <br>--request POST &#39;https://REPLACE_WITH_IP:REPLACE_WITH_PORT/getinfo&#39;  <br>--header &#39;Content-Type: application/xml&#39; <br>--data-raw &#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;ns0:getinforequest xmlns:ns0=&quot;http://www.ericsson.com/em/emm/provisioning/v1&quot;&gt;&lt;identity&gt;ID:999999999/MSISDN&lt;/identity&gt;&lt;/ns0:getinforequest&gt;&#39;</pre><p>This curl command demonstrates how to securely make an HTTP POST request to an API endpoint using client certificates and authentication credentials. Here&#39;s a breakdown:</p><ul><li>--cacert &#39;/ibl/app/bnk/assest/external_ca_test.crt&#39;: Specifies the path to the CA (Certificate Authority) certificate file used to verify the server&#39;s certificate.</li><li>--cert &#39;/ibl/app/bnk/assest/cent_test.crt&#39;: Specifies the path to the client certificate file used for client authentication.</li><li>--key &#39;/ibl/app/bnk/assest/testservercert.key&#39;: Specifies the path to the private key file corresponding to the client certificate.</li><li>--location: Instructs curl to follow HTTP redirects if the server responds with a redirect.</li><li>--header &#39;Authorization: Basic REPLACE_WITH_BASE64_ENCODED_CREDENTIALS&#39;: Adds an Authorization header using HTTP Basic authentication. Replace this with your Base64 encoded credentials. For example, username:password encoded in Base64.</li><li>--request POST: Specifies that the HTTP method for the request is POST.</li><li>&#39;https://REPLACE_WITH_IP:REPLACE_WITH_PORT/getinfo&#39;: The URL of the API endpoint to which the request is made. Replace this with the IP address and port where the request should be sent.</li><li>--header &#39;Content-Type: application/xml&#39;: Adds a Content-Type header specifying that the request body is in XML format.</li><li>--data-raw &#39;&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&lt;ns0:getinforequest xmlns:ns0=&quot;http://www.ericsson.com/em/emm/provisioning/v1&quot;&gt;&lt;identity&gt;ID:999999999/MSISDN&lt;/identity&gt;&lt;/ns0:getinforequest&gt;&#39;: Specifies the raw XML data to be sent in the request body, containing information about the account holder.</li></ul><p><em>Remember to replace these placeholders with your actual values before using the command.</em></p><blockquote>In this article, we’ve explored how to configure RestTemplate with client certificates, along with CA certificate usage to ensures robust security for communication in a Spring Boot application. By following the outlined steps, you can effectively integrate client certificate authentication into your Spring applications, enhancing the security of your communication channels when interacting with external services or APIs over HTTPS. This approach not only strengthens the security posture of your application but also ensures the confidentiality and integrity of sensitive data transmitted between systems.</blockquote><img src="https://medium.com/_/stat?event=post.clientViewed&referrerSource=full_rss&postId=a25feb2d9918" width="1" height="1" alt=""><hr><p><a href="https://medium.com/coderbyte/using-resttemplate-with-client-certificates-a25feb2d9918">Using RestTemplate with client certificates</a> was originally published in <a href="https://medium.com/coderbyte">Tech x Talent</a> on Medium, where people are continuing the conversation by highlighting and responding to this story.</p>]]></content:encoded>
        </item>
        <item>
            <title><![CDATA[How to Create a Free VPN]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/coderbyte/how-to-create-a-free-vpn-2821214839da?source=rss----8ff38ed26d69---4"><img src="https://cdn-images-1.medium.com/max/600/0*f0k93JomY8ElTNh3" width="600"></a></p><p class="medium-feed-snippet">Create your own VPN in AWS for absolutely free of cost.</p><p class="medium-feed-link"><a href="https://medium.com/coderbyte/how-to-create-a-free-vpn-2821214839da?source=rss----8ff38ed26d69---4">Continue reading on Tech x Talent »</a></p></div>]]></description>
            <link>https://medium.com/coderbyte/how-to-create-a-free-vpn-2821214839da?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/2821214839da</guid>
            <category><![CDATA[cloud-computing]]></category>
            <category><![CDATA[aws]]></category>
            <category><![CDATA[devops]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[vpn]]></category>
            <dc:creator><![CDATA[Harish Maddukuri]]></dc:creator>
            <pubDate>Wed, 17 Apr 2024 12:13:18 GMT</pubDate>
            <atom:updated>2024-04-17T12:13:18.376Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Is there a right time to transition to technology?]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/coderbyte/is-there-a-right-time-to-transition-to-technology-1de3f360732e?source=rss----8ff38ed26d69---4"><img src="https://cdn-images-1.medium.com/max/2600/0*LochhGNy15bQDcJb" width="3710"></a></p><p class="medium-feed-snippet">Use the Friend Link to read this story, if you are not a Medium member.</p><p class="medium-feed-link"><a href="https://medium.com/coderbyte/is-there-a-right-time-to-transition-to-technology-1de3f360732e?source=rss----8ff38ed26d69---4">Continue reading on Tech x Talent »</a></p></div>]]></description>
            <link>https://medium.com/coderbyte/is-there-a-right-time-to-transition-to-technology-1de3f360732e?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/1de3f360732e</guid>
            <category><![CDATA[career-advice]]></category>
            <category><![CDATA[programming]]></category>
            <category><![CDATA[women-in-tech]]></category>
            <category><![CDATA[life-lessons]]></category>
            <category><![CDATA[technology]]></category>
            <dc:creator><![CDATA[Mariana Carvalho]]></dc:creator>
            <pubDate>Mon, 19 Feb 2024 19:09:56 GMT</pubDate>
            <atom:updated>2024-03-02T13:15:33.624Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[GenAI Odyssey: Reflecting on 2023 and Charting the Course for 2024 and Beyond]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/coderbyte/genai-odyssey-reflecting-on-2023-and-charting-the-course-for-2024-and-beyond-d091fe5b84f1?source=rss----8ff38ed26d69---4"><img src="https://cdn-images-1.medium.com/max/1640/1*ZGCHNtECQWQiRHQvrR49KA.png" width="1640"></a></p><p class="medium-feed-snippet">Welcome to 2024, a year that promises to be a frontier of innovation and progress in the realm of Generative Artificial Intelligence&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/coderbyte/genai-odyssey-reflecting-on-2023-and-charting-the-course-for-2024-and-beyond-d091fe5b84f1?source=rss----8ff38ed26d69---4">Continue reading on Tech x Talent »</a></p></div>]]></description>
            <link>https://medium.com/coderbyte/genai-odyssey-reflecting-on-2023-and-charting-the-course-for-2024-and-beyond-d091fe5b84f1?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/d091fe5b84f1</guid>
            <category><![CDATA[digital-transformation]]></category>
            <category><![CDATA[generative-ai-tools]]></category>
            <category><![CDATA[technology]]></category>
            <category><![CDATA[artificial-intelligence]]></category>
            <dc:creator><![CDATA[Arun Jain]]></dc:creator>
            <pubDate>Mon, 19 Feb 2024 19:09:55 GMT</pubDate>
            <atom:updated>2024-02-19T19:09:55.206Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[Understanding Polling Techniques — Short Polling (HTTP Polling)]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-snippet">As software developers, often we encounter situations where the server takes a long time to process a request, and hence the requests time&#x2026;</p><p class="medium-feed-link"><a href="https://medium.com/coderbyte/understanding-polling-techniques-short-polling-http-polling-f8908a3552e3?source=rss----8ff38ed26d69---4">Continue reading on Tech x Talent »</a></p></div>]]></description>
            <link>https://medium.com/coderbyte/understanding-polling-techniques-short-polling-http-polling-f8908a3552e3?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/f8908a3552e3</guid>
            <category><![CDATA[backend-development]]></category>
            <category><![CDATA[python]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[system-design-concepts]]></category>
            <dc:creator><![CDATA[Piyasa Basak]]></dc:creator>
            <pubDate>Tue, 19 Dec 2023 03:17:16 GMT</pubDate>
            <atom:updated>2023-12-18T08:43:13.176Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[3 Mistakes CS Students Make That Cost Them Opportunities and Delay Their Growth]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/coderbyte/3-mistakes-cs-students-make-that-cost-them-opportunities-and-delay-their-growth-6ffd48e20aee?source=rss----8ff38ed26d69---4"><img src="https://cdn-images-1.medium.com/max/2600/0*l2dCKlXwuZUP1zy3" width="6720"></a></p><p class="medium-feed-snippet">Students don&#x2019;t realize the mistakes they make in college until it&apos;s too late.</p><p class="medium-feed-link"><a href="https://medium.com/coderbyte/3-mistakes-cs-students-make-that-cost-them-opportunities-and-delay-their-growth-6ffd48e20aee?source=rss----8ff38ed26d69---4">Continue reading on Tech x Talent »</a></p></div>]]></description>
            <link>https://medium.com/coderbyte/3-mistakes-cs-students-make-that-cost-them-opportunities-and-delay-their-growth-6ffd48e20aee?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/6ffd48e20aee</guid>
            <category><![CDATA[careers]]></category>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[college]]></category>
            <category><![CDATA[computer-science]]></category>
            <category><![CDATA[advice]]></category>
            <dc:creator><![CDATA[Munaiz Ahmed]]></dc:creator>
            <pubDate>Sun, 22 Oct 2023 19:59:06 GMT</pubDate>
            <atom:updated>2023-10-22T19:59:06.613Z</atom:updated>
        </item>
        <item>
            <title><![CDATA[3 Reasons Why CS Students Should Apply to Jobs & Internships Even Though They Don’t Feel “Ready”]]></title>
            <description><![CDATA[<div class="medium-feed-item"><p class="medium-feed-image"><a href="https://medium.com/coderbyte/3-reasons-why-cs-students-should-apply-to-jobs-internships-even-though-they-dont-feel-ready-bae0513debec?source=rss----8ff38ed26d69---4"><img src="https://cdn-images-1.medium.com/max/2600/0*9ddYo3tfg7wYYQUo" width="3481"></a></p><p class="medium-feed-snippet">Many CS students feel like they aren&#x2019;t ready to start applying for jobs.</p><p class="medium-feed-link"><a href="https://medium.com/coderbyte/3-reasons-why-cs-students-should-apply-to-jobs-internships-even-though-they-dont-feel-ready-bae0513debec?source=rss----8ff38ed26d69---4">Continue reading on Tech x Talent »</a></p></div>]]></description>
            <link>https://medium.com/coderbyte/3-reasons-why-cs-students-should-apply-to-jobs-internships-even-though-they-dont-feel-ready-bae0513debec?source=rss----8ff38ed26d69---4</link>
            <guid isPermaLink="false">https://medium.com/p/bae0513debec</guid>
            <category><![CDATA[software-development]]></category>
            <category><![CDATA[life]]></category>
            <category><![CDATA[internships]]></category>
            <category><![CDATA[college]]></category>
            <category><![CDATA[career-advice]]></category>
            <dc:creator><![CDATA[Munaiz Ahmed]]></dc:creator>
            <pubDate>Sun, 22 Oct 2023 19:59:04 GMT</pubDate>
            <atom:updated>2023-10-22T19:59:04.082Z</atom:updated>
        </item>
    </channel>
</rss>