Solved

Import Wildcard Certificate to Tomcat6

Posted on 2013-11-17
17
994 Views
Last Modified: 2016-12-08
Hello to you all:

I have a wildcard certificate from RapisSSL.  The CSR was created with IIS7 on Windows Server 2008 R2.  I need to import this CA to tomcat6 on a Windows Server 2008 R2 server.

I received the certificate via E-Mail, and I just copy-paste it to Notepad as tomcat6.cer.

I used the following commands to import the certificate:

keytool -importcert  -alias "tomcat6" -file c:\Users\tomcatadmin\Desktop\tomcat6.cer -keystore C:\JIRA\bin\cacerts

I get a response that the certificate was installed, with no errors.  I can also see the certificate and its alias by running the commands:

keytool -list -v   -keystore C:\JIRA\bin\cacerts

Then I restarted tomcat.  However, I keep seeing the old and expired certificate on the web site.

Other things I have tried are deleting the expired certificate and re-importing the new and valid certificate:

keytool -delete -alias tomcat -keystore  C:\JIRA\bin\cacerts

keytool -import -trustcacerts -alias "tomcat6" -file c:\Users\tomcatadmin\Desktop\tomcat6.cer -keystore C:\JIRA\bin\cacerts


I have also tried importing the certificate with the same alias as the expired certificate, but that gave me an error about the public and private keys not matching.

I have looked at similar problems here, but I still cannot get this to work.  I wonder if importing a wildcard certificate is different than others.  Also, if it makes a difference that the CSR was created in IIS7.

I hope you can help get this certificate installed and working.


Thanks.
--Willie
0
Comment
Question by:willie0-360
  • 9
  • 8
17 Comments
 
LVL 35

Expert Comment

by:mccarl
ID: 39657888
Can you post your tomcat "server.xml" config file?
0
 

Author Comment

by:willie0-360
ID: 39660673
mccarl:

Here is the server.xml file for tomcat:

<?xml version="1.0" encoding="utf-8" ?>
- <!--
   Tomcat configuration file used for the Atlassian JIRA standalone edition.
 
-->
- <!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
- <Server port="8005" shutdown="SHUTDOWN">
- <!--
APR library loader. Documentation at /docs/apr.html
-->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
- <!--
Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html
-->
<Listener className="org.apache.catalina.core.JasperListener" />
- <!--
 JMX Support for the Tomcat server. Documentation at /docs/non-existent.html
-->
<Listener className="org.apache.catalina.mbeans.ServerLifecycleListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
- <!--
 Global JNDI resources
       Documentation at /docs/jndi-resources-howto.html
 
-->
- <!--
 A "Service" is a collection of one or more "Connectors" that share
       a single "Container" Note:  A "Service" is not itself a "Container",
       so you may not define subcomponents such as "Valves" at this level.
       Documentation at /docs/config/service.html
   
-->
- <Service name="Catalina">
<Connector port="80" protocol="HTTP/1.1" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" useBodyEncodingForURI="true" enableLookups="false" redirectPort="443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
- <Engine name="Catalina" defaultHost="localhost">
- <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
- <Context path="" docBase="${catalina.home}/atlassian-jira" reloadable="false" useHttpOnly="true">
<Resource name="jdbc/JiraDS" auth="Container" type="javax.sql.DataSource" username="jira_prod" password="g3n3ral" driverClassName="oracle.jdbc.OracleDriver" url="jdbc:oracle:thin:@servername:1521:GENDB" connectionProperties="SetBigStringTryClob=true" maxActive="20" validationQuery="select 1 from dual" />
- <!--
 NOTE: When a database server reboots or there is a network failure all the connections in the
            connection pool are broken and normally this requires a Application Server reboot.
            If you include the parameter validationQuery="{QUERY FOR YOUR DB HERE}" in the resource tag above,
            a new connection is created to replace it. (eg for MySQL: validationQuery="Select 1")
            For more information see http://confluence.atlassian.com/display/JIRA/Surviving+Connection+Closures.
            This is extremely important for MySQL because it has a default connection timeout of 8 hours.
         
-->
- <!--
 NOTE: Once you move off hsqldb onto a production DB server:
              delete or change the minEvictableIdleTimeMillis and timeBetweenEvictionRunsMillis attributes
              change the database type in atlassian-jira/WEB-INF/classes/entityengine.xml
         
-->
<Resource name="UserTransaction" auth="Container" type="javax.transaction.UserTransaction" factory="org.objectweb.jotm.UserTransactionFactory" jotm.timeout="60" />
<Manager pathname="" />
<Parameter name="jira.home" value="C:/Jira Data" />
</Context>
</Host>
- <!--
            Enable access logging.

            This should produce access_log.<date> files in the 'logs' directory.

            The output access log lies has the following fields :

            IP Request_Id User Timestamp  "HTTP_Method URL Protocol_Version" HTTP_Status_Code ResponseSize_in_Bytes RequestTime_In_Millis Referer User_Agent ASESSIONID

            eg :

            192.168.3.238 1243466536012x12x1 admin [28/May/2009:09:22:17 +1000] "GET /jira/secure/admin/jira/IndexProgress.jspa?taskId=1 HTTP/1.1" 200 24267 1070 "http://carltondraught.sydney.atlassian.com:8090/jira/secure/admin/jira/IndexAdmin.jspa" "Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.0.10) Gecko/2009042523 Ubuntu/9.04 (jaunty) Firefox/3.0.10" "C2C99B632EE0F41E90F8EF7A201F6A78"

            NOTES:

            The RequestId is a millis_since_epoch plus request number plus number of concurrent users

            The Request time is in milliseconds

            The ASESSIONID is an MD5 hash of the JSESSIONID and hence is safe to publish within logs.  A session cannot be reconstructed from it.

            See http://tomcat.apache.org/tomcat-6.0-doc/config/valve.html for more information on Tomcat Access Log Valves
       
-->
<Valve className="org.apache.catalina.valves.AccessLogValve" resolveHosts="false" pattern="%a %{jira.request.id}r %{jira.request.username}r %t "%m %U%q %H" %s %b %D "%{Referer}i" "%{User-Agent}i" "%{jira.request.assession.id}r"" />
</Engine>
- <!--
 To run JIRA via HTTPS:
              * Uncomment the Connector below
              * Execute:
                  %JAVA_HOME%\bin\keytool -genkey -alias tomcat -keyalg RSA (Windows)
                  $JAVA_HOME/bin/keytool -genkey -alias tomcat -keyalg RSA  (Unix)
                with a password value of "changeit" for both the certificate and the keystore itself.
              * If you are on JDK1.3 or earlier, download and install JSSE 1.0.2 or later, and put the JAR files into
                "$JAVA_HOME/jre/lib/ext"
              * Restart and visit https://localhost:8443/

              For more info, see http://tomcat.apache.org/tomcat-6.0-doc/ssl-howto.html
         
-->
<Connector port="443" maxHttpHeaderSize="8192" SSLEnabled="true" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" useBodyEncodingForURI="true" keystoreFile="C:\JIRA\bin\cacerts" keystorePass="changeit" />
- <!--
 To connect to an external web server (typically Apache)
-->
- <!--
 Define an AJP 1.3 Connector on port 8009
-->
- <!--
            <Connector port="8009"
              enableLookups="false" redirectPort="443" protocol="AJP/1.3" />
       
-->
</Service>
</Server>


Thanks
--Willie
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39664735
Ok, so now I think we have all the info we need to get this going.

There are 2 main issues here. The first is that you are importing the certificate into the keystore as a different alias. You are using tomcat6 where the original, old certificate has tomcat as it's alias. Tomcat, by default, looks for the certificate under the alias tomcat and this is why even when you are able to import the cert with no errors, the old one is still used. If you want to keep to what you are trying to do, you need to tell Tomcat to look for a different alias. You can do this by adding the following attribute to your SSL connector config (the part that you put in bold above)...
keyAlias="tomcat6"

Open in new window

Now once that is done, Tomcat should look for that new certificate to use, however, you will still have problems. The next issue is that Tomcat needs both the certificate AND the private key that was generated along with the public key when the CSR was created. At the moment, that private key lives ONLY on the computer that generated the CSR. You need to get a hold of that private key so you can import it into your keyStore (alongside the certificate that you have imported). These steps should get that done...
First ensure that the CSR procedure was completed on the computer running IIS, ie. make sure that the certificate that you received from RapidSSL as a result of the CSR was loaded on the IIS computer. This ensures that the certificate and the private key are associated with each other and living together on that computer
Now, you need to export this certificate/private key pair from that IIS computer. The certificates are actually managed by Windows itself, so have a look here, http://www.digicert.com/ssl-support/pfx-import-export-iis-7.htm, and follow the steps for "Exporting/Backing Up to a .pfx File" (don't worry about the info after that). Note that you will need to know the password that was used to create the private/public key pair initially in order to export
Now you need to import this into your "cacerts" keystore. You should use a command such as keytool -importkeystore -srckeystore the_file_you_just_exported.pfx -srcstoretype pkcs12 -destkeystore C:\JIRA\bin\cacerts -deststoretype jks -deststorepass changeit. It will ask you for the source keystore password, you should use the same as you needed to in the previous step
Last couple of things, you need to fix the "alias" that has been created in the keystore. I can't quite tell from your initial post above, at what state your keystore is in, ie. whether it has a tomcat entry and/or a tomcat6 entry, but just decide on which alias you want to use, configure that in tomcat's server.xml as I said above (or omit it if you want to just use tomcat) and then delete any existing entries in the keystore (you posted the command to do that above). Now when you imported the .pfx file in the previous step, the console output should have told you what alias it was imported as, use that in the following command, keytool -changealias -keystore C:\JIRA\bin\cacerts -storepass changeit -alias <what it was imported as> -destalias <what you want to use, tomcat, tomcat6, etc>
And the final step (hopefully) is to correct the key password (note that this is a different item to the key store password). When you imported the .pfx file above, it should be set to the same password as you used then, but tomcat needs it to be the same as the key store password, so do something like thiskeytool -keypasswd -keystore C:\JIRA\bin\cacerts -storepass changeit -alias <what you changed it too above> -new changeit. It will ask again for that password used initially and change it to "changeit"


Hopefully that should all get you going, let us know how you get on!
0
 

Author Comment

by:willie0-360
ID: 39664922
mccarl:

Thanks for your response.

Give me three or four days to try your suggestions.  I really have other projects on my plate, and I am just putting some time on one and then the other, and then the other.  However, this one is as important as the other ones.  

I will come back with an update.

Once again, thanks.




--Willie
0
 

Author Comment

by:willie0-360
ID: 39669678
mccarl:

The plan has changed since we do not have a private key for the current certificate.  I was told I can generate a new CSR and a private key.  I will use the Java keytool command to generate them.  After that, I will follow the instructions you provided as appropriate for this new situation.

Please stay tuned.



Thanks.
--Willie
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39671004
No worries... Just one thing then,
I will use the Java keytool command to generate them.  After that, I will follow the instructions you provided as appropriate for this new situation
The process would be quite different then to what I mentioned above. As long as you use 'keytool' to create the private/public key pair and subsequent CSR in the keystore that you will use with Tomcat, then when you get the certificate back, it is a simple case of importing just that certificate into the same keystore and you should be ready to go.

But yeah, get the new certificate and then have a go and let us know if you still have issues.
0
 

Author Comment

by:willie0-360
ID: 39679750
Hello mccarl:

Back to this again.

Should I create a public/private key first?

I then submit the public key, which is the the same as the CSR, to the CA, is that correct?



Thanks.
--Willie
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39679824
Should I create a public/private key first?
Yes, for this you need to use the -genkeypair option to keytool. This will create a private/public key pair under the alias that you specify.

I then submit the public key, which is the the same as the CSR, to the CA, is that correct?
Almost correct. You get keytool to generate the CSR (using the -certreq option) and this CSR is based off the public key but just has some additional information that identifies you/your server. You submit the entire CSR to the CA, not just the public key.


From this they will generate your new certificate which you then import into the same keystore, using the same alias that generated the key pair as, using the -importcert option to keytool.

Now the keystore contains everything it needs to perform SSL. It has the signed certificate which it sends to client machines as they connect, and this contains the public key. The client encrypts some data with this key and sends it back to your server which can decrypt it using the private key contained in the keystore.
0
How your wiki can always stay up-to-date

Quip doubles as a “living” wiki and a project management tool that evolves with your organization. As you finish projects in Quip, the work remains, easily accessible to all team members, new and old.
- Increase transparency
- Onboard new hires faster
- Access from mobile/offline

 

Author Comment

by:willie0-360
ID: 39690304
mccarl:

I am trying to generate the public and private keys with the following commands:

C:\Program Files\Java\jre7\bin>keytool -genkey -keyalg RSA -alias "c:\users\admin\tomcat6" -validity 365 -dname "CN=Company Name, OU=., O=Company Name, L=New York City, S=NY, C=US, Email=my-email@company.us"
Enter keystore password:
Enter key password for <c:\users\admin\tomcat6>
        (RETURN if same as keystore password):

C:\Program Files\Java\jre7\bin>


However, when I try to look for the keys, I do  not find them.  A file named .keystore is created, but I do not think those are the keys.  I am expecting the keys to be tomcat6.

I hope you can help me.


Thanks.
--Willie
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39691382
.keystore IS your keys, I think you have the idea slightly wrong. A "keystore" is a file on in the filesystem that can contain multiple keys and certificates. Because it can contain multiple entries, these entries need to be labelled in some way so as to be able to distinguish them. This is what the "alias" is used for.

So to resolve a particular entry, you need to specify the location to the keystore file and the alias of the entry within the keystore. Incidentally, tomcat uses the "keystoreFile" and "keyAlias" atttributes (as shown right up the top of this thread) to specify this location/alias for the key/cert to use.

So with your command above, the reason why you got a file created called ".keystore" is because that is the default keystore filename to use when it is NOT supplied via the -keystore command line argument. You were trying to use the path of the desired file as the alias.

To do what you want, assuming that you are happy creating a new keystore file as opposed to creating these keys in the existing keystore, use this command...

C:\Program Files\Java\jre7\bin>keytool -genkey -keyalg RSA -keystore "c:\users\admin\tomcat6" -alias tomcat -validity 365 -dname "CN=Company Name, OU=., O=Company Name, L=New York City, S=NY, C=US, Email=my-email@company.us"

Note, that I have specified the alias as tomcat (as opposed to tomcat6) as that is the default alias that Tomcat uses to look up the details. Using tomcat means that you don't need the "keyAlias" attribute in your server.xml file.
0
 

Author Comment

by:willie0-360
ID: 39696545
mmcarl:

I think we are making some progress here.  I ran this command (typed on a single line):

keytool -genkeypair -alias tomcat6 -keyalg RSA -keysize 2048 \
-validity 365 -keystore "c:\users\admin\cacerts" \
-dname "CN=Company Name, OU=., O=Company Name, L=New York City, S=NY, C=US, EMAILADDRESS=my-email@company.us"


The Java version running on this server is 1.6.0_21.

From what I now understand, it generates the public/private key pair and the certificate request at the same time.  It also stores them inside the existing keystore file cacerts.

When I go to the web site, I can see the browser displaying the new self-signed server certificate.  The existing cacerts also has other certificates in it.


I tried creating a CSR with the following command:

keytool -certreq -alias tomcat6 -keyalg RSA -file C:\Users\admin\Desktop\www.example.us.csr

but I get the following error:

: java.lang.Exception: Keystore file does not exist: C:\Users\admin\.keystore

I thought I was creating the CSR with that last command or is the CSR inside the keystore file cacerts?

Now, what do I use to send to the CA to request a commercial certificate?


Thanks.
--Willie
0
 

Author Comment

by:willie0-360
ID: 39696808
mmcarl:

I just ran this command to get the MD5 certificate fingerprint for the key alias tomcat6:

keytool -list -v -alias tomcat6 -keystore c:\users\admin\cacerts > c:\Users\admin\Desktop\www.example.us.csr

The www.example.us.csr file shows something similar to this:

Alias name: tomcat6
Creation date: Dec 4, 2013
Entry type: PrivateKeyEntry
Certificate chain length: 1
Certificate[1]:
Owner: CN=Company Name, OU=., O=Company Name, L=New York City, S=NY, C=US, EMAILADDRESS=my-email@company.us
Issuer: CN=Company Name, OU=., O=Company Name, L=New York City, ST=NY, C=US, EMAILADDRESS=my-email@company.us
Serial number: 631d2405
Valid from: Wed Dec 04 15:37:40 EST 2013 until: Thu Dec 04 15:37:40 EST 2014
Certificate fingerprints:
       MD5:  66:6Y:8C:23:D4:FB:C8:10:FF:33:U4:R4:49:77:8T:Q8
       SHA1: 5B:11:7D:DB:E2:CB:78:3F:C4:99:W2:K4:R2:C2:5Y:Y7:23:YY:G5:44
       Signature algorithm name: SHA1withRSA
       Version: 3


Is that MD5-certificate fingerprint what I need to send to the CA to request a commercial certificate?


Thanks.
--Willie
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39697002
No, you need to send the CSR not just an MD5 fingerprint. And no the CSR is not "stored" inside the keystore directly, just the information (public key and a few other bits) that is required in order to create the CSR.

You were very close with the "keytool -certreq" command, and the error message was telling you what was happening. It was trying to look at "C:\Users\admin\.keystore" for the keystore but when you created the keys you put them in "C:\Users\admin\cacerts" keystore. ".keystore" is the default filename used when one isn't given on the command line, and because your keys were created in a non-default named keystore, you just need to remember to supply the filename of the keystore to 'every' invocation of keytool.

So try the following...

keytool -certreq -keystore "c:\users\admin\cacerts" -alias tomcat6 -keyalg RSA -file C:\Users\admin\Desktop\www.example.us.csr

(It is exactly the same as you tried before, but with the addition of "-keystore" argument)

The file that is produced will have quite a different format than just the entry listing that you posted above. Then you send that entire .csr file to the CA.
0
 

Author Comment

by:willie0-360
ID: 39706231
I got the commercial certificate generated from the CSR.  However, when I try to import it to the keystore cacerts, I get this error:

keytool -importcert -file c:\users\admin\Desktop\certificate_file -alias tomcat6 -keystore c:\JIRA\bin\cacerts
Enter keystore password:
keytool error: java.lang.Exception: Failed to establish chain from reply


Where

c:\users\admin\Desktop\certificate_file

is the commercial certificate and

c:\JIRA\bin\cacerts

is the keystore file.

I Googled searched for a solution.  I even followed a suggestion to convert this file to a .p7b file, but it still gives me the same error.  

I hope you can help me.

Thanks.
--Willie
0
 
LVL 35

Accepted Solution

by:
mccarl earned 500 total points
ID: 39707715
I think you might have two problems here... The one that you are currently getting the exception for is due to the fact that keytool is wanting to see the full chain of certificates from the one just created for you, right up to the Root CA that is implicitly trusted. You need to download any/all intermediate CA certificates used by the CA that generated your certificate and import those first. (Your CA may have also already sent those to you when they sent you your generated certificate) Either way they should be easy to find. For example, if you are still using RapidSSL (as mentioned in the first question), a quick google search returned this... https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&id=AR1549

Once you have the intermediate CA certificates, you just need to import them (very similar command line to what you used before), and then you should be able to import YOUR certificate. (Note: you may need to add the -trustcacerts option to keytool if you still have errors)


The other problem that I mentioned, is that you seem to be referencing a "different" keystore file now. In the very last post you've used "c:\jira\bin\cacerts" but in the previous couple of posts you had "c:\users\admin\cacerts"? Have you just moved that file around or are they actually two different files? You need to import the certificate that you received into the keystore file that you generated the request from. Otherwise, it won't have the associated private key that was created when you generated the key pair. Then you use that keystore, that has both the private key and the imported certificate, in the configuration of tomcat. (Way back up in your second post in this thread, you list the tomcat config... well the "keystoreFile" needs to point to the keystore that contains your private key and newly generated certificate) And as I said, somewhere up the top too, since you have used the alias "tomcat6" you need to configure tomcat for that too, with "keyAlias" in your server.xml file.
0
 

Author Comment

by:willie0-360
ID: 39710364
mmcarl:

For the second problem, I apologize to you and everyone else who may one day benefit from this thread.  Please treat the keystore file c:\JIRA\bin\cacerts  as the same from the first post to end regardless of its path.


This is what I did so that we finally have this one covered:


To install intermediate certificte from RapidSSL:

keytool -import -alias -trustcacerts -file  c:\users\admin\Desktop\RapidSSL_CA.cer \
-keystore "c:\JIRA\bin\cacerts"


To get the RapidSSL_CA.cer, RapidSSL_CA.cer is the intermidate certificate file, I had to go to the site you posted in your previous post, namely,  

https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&id=AR1549

That site then took me to this site:

https://knowledge.rapidssl.com/support/ssl-certificate-support/index?page=content&actp=CROSSLINK&id=SO16220

where I followed the instructions on how to download and save the RapidSSL Intermediate CA in step 3.

In this step 3, you (anyone out there that is trying to get this working) need to do this:

(Right Click on link & Save) to get the RapidSSL Intermediate CA.  
It was not sent to me via E-Mail, so that is how I got it.

To install the commercial certificate sent to me via E-Mail by RapidSSL:


keytool -importcert -file c:\users\admin\Desktop\certificate_file.pem -alias tomcat6 -keystore "c:\JIRA\bin\cacerts" -trustcacerts

where certificate_file.pem is the commercial certificate sent via E-Mail and cacerts is the keystore file.

Note that I had to add the .pem extension to the commercial certificate file since I was getting an error that the file was not found when trying to import it without the .pem extension.

I also added the

keyAlias="tomcat6" to the server.xml file as indicated in posts above.

I then restarted Tomcat and things finally worked.

Thank you indeed mmcarl for having stuck around with me on this one.
Thanks for your patience and sharing your knowledge.

--Willie
0
 
LVL 35

Expert Comment

by:mccarl
ID: 39710378
Willie,

You are most welcome. I'm glad that we were able to get there in the end. Hopefully, in addition to solving the immediate problem at hand, you have a better understanding of what all these pieces (private keys, public keys, certificates, CSR's, keystores, etc, etc) are and how they all fit together. With all the slightly variations that are possible, it is not all that straight forward, but it is good that we got there in the end!  ;)

Cheers,
mccarl
0

Featured Post

Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

Join & Write a Comment

One of the typical problems I have experienced is when you have to move a web server from one hosting site to another. You normally prepare all on the new host, transfer the site, change DNS and cross your fingers hoping all will be ok on new server…
Meet the world's only “Transparent Cloud™” from Superb Internet Corporation. Now, you can experience firsthand a cloud platform that consistently outperforms Amazon Web Services (AWS), IBM’s Softlayer, and Microsoft’s Azure when it comes to CPU and …
Sending a Secure fax is easy with eFax Corporate (http://www.enterprise.efax.com). First, Just open a new email message.  In the To field, type your recipient's fax number @efaxsend.com. You can even send a secure international fax — just include t…
Internet Business Fax to Email Made Easy - With eFax Corporate (http://www.enterprise.efax.com), you'll receive a dedicated online fax number, which is used the same way as a typical analog fax number. You'll receive secure faxes in your email, fr…

760 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now